2015-10-24 2 views
0

У меня очень странная ситуация. У меня есть функция AJAX, которая отправляет данные формы контроллеру php codeigniter, на ответ json, он должен иметь дело с ответом. первая часть работает, но позже часть, которая является функцией .done(), не работает, независимо от того, что я пытаюсь. вот мой сценарий:Ajax .done() не работает вместе для меня

var validator = $('#register-company-form').validate({ 
    rules: { 
     title: { 
      required: true, 
      valueNotEquals: 0 
     }, 
     /* rules here */ 
    }, 
    highlight: function (element) { 
     $(element).closest('.form-field').addClass('error-field'); 
    }, 
    unhighlight: function (element){ 
     $(element).closest('.form-field').removeClass('error-field'); 
    }, 
    errorPlacement: function(error, element) {}, 
    submitHandler: function(form) { 
     var formData = new FormData($(form)[0]); 
     $.ajax({ 
      type: $(form).attr('method'), 
      url: $(form).attr('action'), 
      data: formData, 
      dataType: 'json', 
      cache: false, 
      contentType: false, 
      processData: false 
     }) 
     .done(function (response) { 
      $(".form-field").removeClass("error-field"); 
      $(".item-exists").hide(); 

      if(response.Response == 401) { 
       $("#company_email").closest('.form-field').addClass('error-field'); 
       $("#company_email").closest(".form-field").find(".item-exists").show(); 
      } else if(response.Response == 402) { 
       $("#personal_email").closest('.form-field').addClass('error-field'); 
       $("#personal_email").closest(".form-field").find(".item-exists").show(); 
      } else if(response.Response == 403) { 
       $("#user_name").closest('.form-field').addClass('error-field'); 
       $("#user_name").closest(".form-field").find(".item-exists").show(); 
      } else if(response.Response == 200){ 
       /* load my view */ 
      } 
     }); 
     return false; 
    } 
}); 

Мой PHP возвращает скрипт следующего JSON ответа:

{ "Ответ": 200, "Data": нулевой, "сообщение": нулевая}

После получения этот ответ, моя функция .done() должна действовать в соответствии с ней и загружать страницу, которой она не является. Я попытался поставить console.log() и alert() в него, но теперь его ясность не отвечает. Есть ли другой способ сделать это или любую коррекцию в коде? Обратите внимание, что тот же код действительно отлично работает на другом сервере. Это произошло после миграции.

Большое вам спасибо за помощь!

+0

В большинстве браузеров вы можете открыть инструменты разработчика и посмотреть на запроса и ответа, чтобы убедиться, что все так, как ожидалось. Вы это сделали? – flup

+0

Что означает 'загрузка страницы'? Ничто в показанном коде не отражает ничего подобного – charlietfl

+0

Используйте [Firebug] (http://getfirebug.com) и загляните в заголовки. – Jan

ответ

1

Большой вам спасибо за вашу любезную информацию @DFreind и @JonathanLonowski, с намеками, я наконец понял, эту проблему, которая приняла меня почти 3 дня. На самом деле, когда я внимательно посмотрел на HTML, полученного с помощью PHP, он сказал: 1 { "Ответ": 200, "Data": нулевой, "сообщение": нулевая}

Это '1' до того, как строка JSON было генерация не может изменить ошибку заголовков! После долгих усилий я просто увидел простую чертову «1» перед тем, как открыть тег <?php на первой строке моего контроллера. Удаление этого «1» работал как шарм, все ошибки исчезли, спасенная жизнь, дозируя в раю :-)

Показания для исследователей: Пожалуйста установите Firebug, если вы столкнулись подобные ошибки и всегда смотреть в заголовки ответа, попробуйте экспериментировать. В большинстве случаев ошибки PHP возникают с вашим выходом. В моем случае возникла ошибка «заголовки уже отправлены», потому что до того, как php запустил свой вывод, вошел html. Следите за любыми функциями echo() или set_cookie()!

Спасибо всем вам StackOverflowish вундеркиндов :)

Смежные вопросы