2016-01-07 8 views
0

Это ответ в php. Я могу подтвердить, что данные в порядке.JQuery Ajax ответ не работает на Firefox

$ajax_response = array(
    'product_code' => $ajax_products, 
    'filter' => $ajax_filter 
); 

echo json_encode($ajax_response); 
exit(); 

Вот код в JavaScript:

$('#pr_category_filter').submit(function (event) { 

    $.ajax({ 
     type: $(this).attr('method'), 
     url: $(this).attr('action'), 
     data: $(this).serialize(), 
     dataType: 'json', 
     cache: false, 
     success: function (data) { 

      if (data.product_code != null) { 
       $('#pagination_contents').replaceWith(data.product_code); 
      } 

      if (data.filter != null) { 
       $('#category_filter').replaceWith(data.filter); 
      } 
     }, 
     error: function (request, status, error) { 
      return false; 
     } 
    }); 

    event.preventDefault(event); 

}); 

Этот код хорошо работает на Chrome и Opera. Однако этот код не работает в Firefox, потому что php «echo» отображается в Firefox вместо ответа ajax. Я также попытался поставить console.debug ('invoked') в javascript. В Firefox не отображается результат, отличный от Chrome. Вы знаете причину?

Ответ такой же в разработке инструментов браузеров.

Благодаря

+1

Что вы подразумеваете под «php 'echo» отображается в Firefox вместо ответа ajax? ?? – developerwjk

+0

В нормальном случае ответ ajax заменяется на теги с id pagination_contents и #category_filter. В Firefox ответ на ajax отображается на экране, как новый HTTP-запрос/ответ. Другими словами, есть новая страница с ответом ajax. –

+0

Я не знаю, но мне кажется странным, что функция 'error:' возвращает значение. «Error:» и «success:» - это функции обратного вызова. Куда это будет стоить? – developerwjk

ответ

0

Функция .preventDefault() не принимает никаких аргументов.

Возможно, Firefox поэтому не принимает это и просто отправляет форму. Chrome, однако, не заботится и не принимает его.

Меняет

event.preventDefault(event); 

В

event.preventDefault(); 

Это должно сделать трюк

+0

Нет, это не сработает. event.preventDefault() была моей первой версией, но я изменился после прочтения сообщения на этом веб-сайте. –

+0

Вот ссылка, которая объясняет разницу между event.preventDefault (event); и event.preventDefault(); : http://stackoverflow.com/questions/1367195/preventdefault-wont-work-on-firefox –

+0

Согласно документации jQuery, функция не принимает никаких аргументов. https://api.jquery.com/event.preventdefault/ –

0

Вы должны использовать header() функции в PHP, чтобы определить тип содержимого ответа вы» Возврат к вызову AJAX. Попробуйте следующее (поместите его перед повторным откликом):

header('Content-Type', 'application/json'); 
+0

Нет, это не работает. Ваш код - это то же самое, что и dataType: 'json', в javascript. –

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