Подтвердить что ты не робот

Javascript: как определить, является ли ответ AJAX JSON

У меня есть запрос AJAX, который ожидает ответа JSON.

Но есть вероятность, что то, что получает результаты, может быть не JSON, а скорее страница ошибок HTML (к сожалению, с типом ответа 200).

Как я могу определить, является ли ответ JSON или нет?

(Я использую jQuery, если это помогает, но я не могу использовать никаких плагинов.)

4b9b3361

Ответ 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 ...
}