jaw*_*317 34 javascript ajax jquery json
我有一个期望JSON响应的AJAX请求.
但是返回的内容可能不是JSON,而是HTML错误页面(不幸的是,响应类型为200).
如何判断响应是否为JSON?
(我正在使用jQuery,如果有帮助.但我不能使用任何插件.)
Cha*_*had 58
好吧,如果你使用jQuery并指定调用的dataType
属性,那么jQuery将尝试解析JSON,如果不是JSON则应该调用回调.$.ajax()
json
error()
$.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)
Arn*_*anc 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`
}
});
Run Code Online (Sandbox Code Playgroud)
jQuery检测dataType并将其作为回调函数的第4个参数传递.如果dataType是JSON,它会解析JSON字符串并将结果值解析为回调的第一个参数.
看起来 try catch 的用法很好:
try {
$.parseJSON(input)
} catch(e) {
// not valid JSON
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29229 次 |
最近记录: |