Сообщение о синтаксических ошибках в объекте JSON с помощью jQuery и / или Javascript
-
06-07-2019 - |
Вопрос
Какой лучший способ сообщить о синтаксической ошибке при загрузке канала JSON с помощью jQuery? Я могу установить параметры отчетов об ошибках следующим образом:
error: function(xhr){
alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}
однако эта функция не срабатывает, когда вызываемый мной URL-адрес загружает допустимую страницу (хотя и не содержащую JSON-объект). Более того, я не могу проверить данные, которые он возвращает, потому что (по крайней мере, в соответствии с Firebug) jQuery.getJSON
прерывается из-за синтаксической ошибки, прежде чем он передает объект в функцию, которая его выполняет. р>
Причина, по которой я хотел бы сообщать об ошибках, заключается в том, что это мой способ проверки, предоставил ли пользователь URL-адрес, который создаст действительный канал JSON.
Вот связанный ответ, требующий контроля над тем, что будет отвечать сервер с .
Вот синтаксическая ошибка, которую дает мне Firebug
Синтаксическая ошибка Firebug дает мне http://img.skitch.com/20090623-8c97g47jha4mn6adqqtjdww / а> р>
Есть идеи? Благодаря
Решение 2
Спасибо всем, кто ответил. Поскольку я вызывал фид JSON из внешнего домена, я не мог просто использовать функциональность JJuery AJAX и перенаправлять фид как " текст " вместо "json". jQuery позволяет вам получать только "json" и "скрипт" из удаленного источника.
Вместо этого я в итоге написал PHP-скрипт для внешнего вызова, который жил на моем собственном сервере. Я использую jQuery AJAX для вызова этого, передаю запрошенный источник в URL, а затем извлекаю его как " текст. & Quot; Затем я запускаю собственную проверку, чтобы убедиться в правильности форматирования JSON, а затем анализирую ее с другой библиотекой. В данный момент jQuery не имеет возможности анализировать JSON; $ .getJSON работает, только если вы передаете ему URL.
Другие советы
Вы можете привязать функцию к глобальным событиям ajaxerror
$(document).ajaxError(function(event, request, ajaxOptions, thrownError){
if ( 4==request.readyState) { // failed after data has received
alert(ajaxOptions['url'] + " did not return valid json data");
}
else {
alert("something else wnet wrong");
}
});
или используйте $ .ajax () вместо $ .getJSON () function foo() {
// $.getJSON("http://localhost/test.txt", function(data){});
$.ajax({
type: "GET",
url: "http://localhost/test.txt",
success: function (data, textStatus) {
alert("succuess");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("request failed: " + textStatus);
},
dataType: "json"
});
}
edit: но вы можете иметь в виду, что оба ajax (dataType: " ; json ") и getJSON () (который просто вызывает .ajax (dataType: " json ") сводится к data = window [" eval "] (" (" + data + ") ")
... это может не будь тем, что ты хочешь, если не знаешь, какие (произвольные) данные запрашивает твой скрипт, и это может объяснить, почему firebug ловит синтаксическую ошибку, когда ты передаешь ему html-документ вместо данных json.
В этом случае лучше запросить dataType: " string " и прогоните данные через полноценный json-анализатор lib. Р>
Вызовите URL-адрес или запрос XHR непосредственно в адресной строке браузера, создайте источник просмотра и вставьте результат в среду IDE, которая понимает JavaScript. Вы, вероятно, заметите неуместную цитату или что-то в этом роде.
По крайней мере, вы сможете удалять его, пока не найдете синтаксис обидчика, если ничего другого.
Добавляя ответ Диодея, вставьте свой потенциально нарушающий JSON в этот инструмент: http: //jsonformatter.curiousconcept. ком /
Если у вас есть firebug, вы можете даже взломать способ использования сайта службой программным способом, хотя это может вызывать недовольство.