Сообщение о синтаксических ошибках в объекте JSON с помощью jQuery и / или Javascript

StackOverflow https://stackoverflow.com/questions/1030348

Вопрос

Какой лучший способ сообщить о синтаксической ошибке при загрузке канала 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, вы можете даже взломать способ использования сайта службой программным способом, хотя это может вызывать недовольство.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top