Кажется очень неудобным, что jQuery $.getJSON
бесшумно терпит неудачу, когда возвращаемые данные недействительны JSON. Почему это было реализовано с бесшумной неудачей? Каков самый простой способ выполнить getJSON с улучшенным поведением (например, сбросить исключение, console.log()
или что-то еще)?
Почему $.getJSON бесшумно терпит неудачу?
Ответ 1
вы можете использовать
function name() {
$.getJSON("", function(d) {
alert("success");
}).done(function(d) {
alert("done");
}).fail(function(d) {
alert("error");
}).always(function(d) {
alert("complete");
});
}
Если вы хотите увидеть причину ошибки, используйте полную версию
function name() {
$.getJSON("", function(d) {
alert("success");
}).fail( function(d, textStatus, error) {
console.error("getJSON failed, status: " + textStatus + ", error: "+error)
});
}
Если ваш JSON не правильно сформирован, вы увидите что-то вроде
getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
Если URL-адрес неверен, вы увидите что-то вроде
getJSON failed, status: error, error: Not Found
Если вы пытаетесь получить JSON из другого домена, нарушая политику одинакового происхождения, этот подход возвращает пустое сообщение. Обратите внимание, что вы можете обойти политику "один и тот же источник", используя JSONP (который имеет ограничения) или предпочтительный метод совместного использования ресурсов Cross-origin (CORS).
Ответ 2
Прямо из документации:
Важно: Как и в jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно терпит неудачу.
Как говорится на странице документации, getJSON - это просто сокращенный метод для
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Чтобы получить отказ, вы можете использовать $.ajax следующим образом:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
error: another callback
});
Ответ 3
Вместо этого вы можете использовать $.ajax
и установить для параметра dataType
значение "json". Из документации:
"json": оценивает ответ как JSON и возвращает объект JavaScript. В jQuery 1.4 данные JSON обрабатываются в строгий порядок; любой некорректный JSON отклонено , а ошибка синтаксического анализа выбрана. (См. Json.org для получения дополнительной информации о правильное форматирование JSON.)
Ответ 4
Вы должны взглянуть на документы для этого API... у него есть .error на нем.
Ответ 5
Если вы запрашиваете JSONP в качестве ответа, вы получите молчащий сбой, если нет ответа (например, отключение сети). Подробнее см. этот поток.