Javascript: как определить, является ли ответ AJAX JSON
У меня есть запрос AJAX, который ожидает ответа JSON.
Но есть вероятность, что то, что получает результаты, может быть не JSON, а скорее страница ошибок HTML (к сожалению, с типом ответа 200).
Как я могу определить, является ли ответ JSON или нет?
(Я использую jQuery, если это помогает, но я не могу использовать никаких плагинов.)
Ответы
Ответ 1
Хорошо, если вы используете jQuery, и вы указываете свойство dataType
вызова $.ajax()
json
, тогда jQuery попытается разобрать JSON, и если это не JSON, вызовите обратный вызов error()
.
$.ajax({
url: '/my/script.ext',
dataType: 'json',
success: function(data, textStatus, jqXHR) { /*YAYE!!*/ },
error: function(jqXHR, textStatus, errorThrown) { /*AWWW... JSON parse error*/ }
});
ИЗМЕНИТЬ
Для тех, кто не использует jQuery, который приземляется здесь, основная идея состоит в том, чтобы попытаться разобрать его как json и поймать ошибку:
var data = 'some_data';
try {
data = JSON.parse(data);
} catch(e) {
//JSON parse error, this is not json (or JSON isn't in your browser)
}
//act here on the the parsed object in `data` (so it was json).
Ответ 2
jQuery автоматически определяет тип данных:
Если ответом является JSON, соответствующее приложение будет устанавливать Content-Type
в приложение /json .
Итак, все, что вам нужно сделать, если сервер хорошо себя ведет, - проверить, заголовок Content-Type в ответе начинается с приложения /json.
Случайно, jQuery уже делает это самостоятельно:
$.get('/foo', function(data, status, xhr, dataType) {
if ('json' === dataType) {
// Yay that JSON !
// Yay jQuery has already parsed `data`
}
});
jQuery обнаруживает тип данных и передает его как 4-й параметр функции обратного вызова. Если dataType является JSON, он разбирает строку JSON и анализирует полученное значение как первый параметр обратного вызова.
Ответ 3
Похоже на использование try catch:
try {
$.parseJSON(input)
} catch(e) {
// not valid JSON
}
Ответ 4
Функция jQuery parseJSON может быть использована для этого. Это вызовет исключение, после чего вы сможете поймать его.
data = '{}';
try {
json = $.parseJSON(data);
} catch (e) {
// not json
}
Ответ 5
try {
jQuery.parseJson(json_string_here);
} catch(e) {
... malformed json ...
}