Javascript:如何判断AJAX响应是否是JSON
Javascript: How to tell whether AJAX response is JSON
我有一个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 ...
}
相关文章:
- 不再使用innerHTML进行AJAX响应.(代码未得到响应)
- 为什么可以't我使用了AJAX响应的一部分
- Ajax响应转换
- 如何在数据表中设置从Ajax响应选中的复选框
- 在Javascript中的ajax响应之后未调用Dropdown事件
- RubyonRails-Ajax响应的问题
- Ajax:Ajax响应中的链接不起作用
- 如何执行ajax响应返回的javascript函数
- 带有 AJAX 响应或 AJAX 响应的 IF 条件.响应.Text 不起作用
- 正在检查ajax响应中的错误数据
- 如何从ajax响应中重新加载整个页面
- 如何使用jQuery/Ajax响应特定的提交按钮
- 是浏览器在AJAX响应中自动处理的HTTP标头
- Masony无法处理ajax响应
- 使用yii2表单等待ajax响应
- jquery返回ajax响应和用户定义的变量到函数
- 使用Ajax响应更新TextBox
- 如何在jquery ajax响应后设置jquery滑块的起始值
- Rails 4中不执行Ajax响应
- jquery解析ajax响应