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

时间:2011-09-02 19:05:51

标签: javascript jquery ajax json

我有一个期待JSON响应的AJAX请求。

但是返回的内容可能不是JSON,而是HTML错误页面(不幸的是,响应类型为200)。

如何判断响应是否为JSON?

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

5 个答案:

答案 0 :(得分:57)

好吧,如果您正在使用jQuery并指定dataType json调用error()的{​​{1}}属性,那么jQuery将尝试解析JSON,如果它不是JSON应该拨打$.ajax({ url: '/my/script.ext', dataType: 'json', success: function(data, textStatus, jqXHR) { /*YAYE!!*/ }, error: function(jqXHR, textStatus, errorThrown) { /*AWWW... JSON parse error*/ } }); 回拨。

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并捕获错误:

{{1}}

答案 1 :(得分:16)

jQuery自动检测dataType:

如果响应是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并将其作为回调函数的第4个参数传递。如果dataType是JSON,它会解析JSON字符串并将结果值解析为回调的第一个参数。

答案 2 :(得分:4)

似乎很好地利用了try catch:

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

答案 3 :(得分:3)

jQuery parseJSON函数可以用于此。它会抛出一个例外,然后你可以抓住它继续。

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

答案 4 :(得分:2)

try {
    jQuery.parseJson(json_string_here);
} catch(e) {
   ... malformed json ...
}