Javascript:如何判断AJAX响应是否是JSON

Javascript: How to tell whether AJAX response is JSON

本文关键字:AJAX 响应 是否是 JSON 判断 何判断 Javascript      更新时间:2023-09-26

我有一个AJAX请求,期望JSON作为响应。

但是有可能得到的返回可能不是JSON,而是一个HTML错误页面(不幸的是,响应类型为200)。

如何判断响应是否为JSON ?

(我正在使用jQuery,如果有帮助的话。但是我不能使用任何插件)

嗯,如果你正在使用jQuery,你指定$.ajax()dataType属性调用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).

jQuery自动检测数据类型:

如果响应是JSON,正常运行的应用程序会将Content-Type设置为application/JSON

因此,如果服务器运行良好,您所要做的就是测试响应中的Content-Type头是否以application/json开头。

碰巧的是,jQuery已经自己完成了:
$.get('/foo', function(data, status, xhr, dataType) {
    if ('json' === dataType) {
        // Yay that's JSON !
        // Yay jQuery has already parsed `data` 
    }
});

jQuery检测dataType并将其作为回调函数的第四个参数传递。如果dataType是JSON,则解析JSON字符串并将结果值解析为回调的第一个参数。

似乎很好地使用了try catch:

try {
   $.parseJSON(input)
} catch(e) {
   // not valid JSON
}

jQuery的parseJSON函数可用于此。它会抛出一个异常,然后你可以继续捕捉它。

data = '{}';
try {
    json = $.parseJSON(data);
} catch (e) {
    // not json
}
try {
    jQuery.parseJson(json_string_here);
} catch(e) {
   ... malformed json ...
}