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

jaw*_*317 34 javascript ajax jquery json

我有一个期望JSON响应的AJAX请求.

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

如何判断响应是否为JSON?

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

Cha*_*had 58

好吧,如果你使用jQuery并指定调用的dataType属性,那么jQuery将尝试解析JSON,如果不是JSON则应该调用回调.$.ajax()jsonerror()

$.ajax({
    url: '/my/script.ext',
    dataType: 'json',
    success: function(data, textStatus, jqXHR) { /*YAYE!!*/ },
    error: function(jqXHR, textStatus, errorThrown) { /*AWWW... JSON parse error*/ }
});
Run Code Online (Sandbox Code Playgroud)

编辑

对于没有使用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).
Run Code Online (Sandbox Code Playgroud)

  • 因为内容类型不可靠.在JS中检查任意字符串是否为json的唯一可靠方法是尝试解析它,并捕获错误.此外,内容类型不会告诉您它是否*有效*json. (2认同)

Arn*_*anc 16

jQuery自动检测dataType:

如果响应是JSON,则正常运行的应用程序将设置Content-Typeapplication/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` 
    }
});
Run Code Online (Sandbox Code Playgroud)

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


Joe*_*Joe 5

看起来 try catch 的用法很好:

try {
   $.parseJSON(input)
} catch(e) {
   // not valid JSON
}
Run Code Online (Sandbox Code Playgroud)