Отправка формы по ajax

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 13 августа 2015 в 15:56
Здравствуйте!
Помогите понять логику.
Для примера взял форму из админки.
  1.  
  2. if ($is_submitted){
  3.  
  4. // Проверяем правильность заполнения
  5. $errors = $form->validate($this, $data);
  6.  
  7. if (!$errors){
  8.  
  9. $data['items'] = explode(',', $data['items']);
  10. $content_model->moveContentItemsToCategory($ctype, $data['category_id'], $data['items'], $fields);
  11.  
  12. $template->renderJSON(array(
  13. 'errors' => false,
  14. 'callback' => 'contentItemsMoved'
  15. ));
  16.  
  17. }
  18.  
  19. if ($errors){
  20. $template->renderJSON(array(
  21. 'errors' => true,
  22. ));
  23. }
  24.  
  25. $this->halt();
  26.  
  27. }
  28.  
А в js стоит такая проверка:
  1.  
  2. if (result.errors == false) {
  3. if ("callback" in result) {
  4. window[result.callback](form_data);
  5. }
  6. return;
  7. }
  8.  
  9. if (typeof (result.errors) == 'object') {
  10.  
  11. $('.field_error', form).removeClass('field_error');
  12. $('.error_text', form).remove();
  13.  
  14. for (var field_id in result.errors) {
  15. var id = field_id.replace(':', '_');
  16. $('#f_' + id, form).addClass('field_error');
  17. $('#f_' + id, form).prepend('<div class="error_text">' + result.errors[field_id] + '</div>');
  18. }
  19.  
  20. icms.modal.resize();
  21.  
  22. return;
  23.  
  24. }
  25.  
Ошибку проверяет на объект. Но ведь мы туда передаем true, это же не объект.
Если я по такому же принципу делаю свою форму, то у меня работает только если форма заполнена, а когда ошибка, то понятно что не срабатывает.
Но как тогда оно работает в админке? )))
#2 13 августа 2015 в 16:14

Ошибку проверяет на объект. Но ведь мы туда передаем true, это же не объект.

Sergey
Условие if (typeof (result.errors) == 'object') { в случае, если в result.errors == true, не срабатывает.

В ajax формах нужно делать вот так:

  1. $errors = $form->validate($this, $data);
  2.  
  3. if ($errors){
  4. cmsTemplate::getInstance()->renderJSON(array(
  5. 'errors' => $errors
  6. ));
  7. }
В $errors содержится массив, в котором ключ является названиям элемента формы, где валидация не удалась, а значение — текст ошибки.

Но как тогда оно работает в админке?

Sergey
Видимо форма просто не отправляется в случае ошибки. Вы не очень наглядный пример взяли.
#3 13 августа 2015 в 17:05
Огробное спасибо! Теперь все стало на свои места! Плюс в карму!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.