我有一个期待JSON响应的AJAX请求。
但是返回的内容可能不是JSON,而是HTML错误页面(不幸的是,响应类型为200)。
如何判断响应是否为JSON?
(我正在使用jQuery,如果有帮助。但我不能使用任何插件。)
答案 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)
如果响应是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 ...
}