2015-06-03 4 views
0

Я использую запрос JQuery $.post, чтобы получить ответ JSON, который генерируется PHP. По завершении запроса отображается сообщение об успешном завершении или ошибке. Однако во время разработки у меня иногда возникают ошибки PHP, которые в конечном итоге возвращаются вместо JSON. Когда это происходит, я просто получаю сообщение об ошибке:JQuery AJAX запрос показать ошибки AJAX и PHP

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

код я теперь выглядит следующим образом:

var request = $.post(url, data, null, "json"); 
request.fail(on_failure); 
var on_failure = function(jqXHR, text_status, error_thrown) 
{ 
    $("#text_status").empty().append(error_thrown); 
}; 

Я хотел бы быть в состоянии показать ошибку PHP, если один возвращается, а чем просто указать, что существует ошибка PHP (просто для ускорения отладки). Очевидно, что если возникает ошибка синтаксического анализа, отличная от JSON, такая как HTTP 404, я все же хочу ее отобразить. Я нашел способ here, который указывает, что я могу обнаружить эту ошибку что-то вроде этого

$.ajaxSetup({ 
    error: function(jqXHR, exception) { 
     if (exception === 'parsererror') { 
      alert('Requested JSON parse failed.'); 
     } 
    } 
}); 

Но это не похоже, что помогает мне, потому что он работает для каждого запроса, а не индивидуальные запросы и (насколько я знаете), он не разрешает доступ к сообщению об ошибке в возвращаемых данных.

+1

Вы пробовали использовать Firebug на вкладке «Net», чтобы увидеть результаты запросов? Иногда там можно увидеть ошибки, которые могут дать некоторые подсказки этой проблеме. –

+0

Я не пробовал, но мне нравится это решение. Спасибо. – bytesized

+0

@ mkross1983 Ваш комментарий - мое предпочтительное решение. В последнее время вкладка Firebug Net оказалась очень полезной для меня. Можете ли вы написать это как ответ, чтобы я мог принять его? – bytesized

ответ

0

Ненавижу, чтобы украсть кредит mkross1983, но он не ответил на мою просьбу, чтобы повернуть свой комментарий в ответ. mkross1983 сказал:

Have you tried using Firebug under the "Net" tab to see the results of the requests? Sometimes errors can be seen there that can give some clues to the problem

Вкладка Firebug «Чистая» оказалась ценным инструментом отладки. Таким образом, я могу точно видеть, какой запрос был сделан, и ответ отправлен на него. Это даже позволяет мне видеть заголовки и файлы cookie, которые были отправлены с запросом.

Спасибо mkross1983

1

Не уверен, какую версию jquery вы используете. Во всяком случае, вы пытались удалить json dataType?

var request = $.post(url, data, null); 

Выполнение этого jQuery угадает тип данных для вас.

+0

Есть ли случаи, когда это могло бы заставить его интерпретировать действительный JSON как нечто еще? – bytesized

+0

Я так не думаю. Другой способ избежать этого - использовать текстовый тип данных, а затем попытаться проанализировать результат с помощью JSON.parse, но обернуть его с помощью блока catch try. – Topicus

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