当返回的数据不是有效的JSON时,jQuery的$.getJSON
无声地失败似乎非常不方便。为什么这是以无声失败实现的?使用更好的失败行为执行getJSON的最简单方法是什么(例如抛出异常,console.log()
或其他什么)?
答案 0 :(得分:84)
你可以使用
function name() {
$.getJSON("", function(d) {
alert("success");
}).done(function(d) {
alert("done");
}).fail(function(d) {
alert("error");
}).always(function(d) {
alert("complete");
});
}
如果您想查看错误原因,请使用完整版
function name() {
$.getJSON("", function(d) {
alert("success");
}).fail( function(d, textStatus, error) {
console.error("getJSON failed, status: " + textStatus + ", error: "+error)
});
}
如果您的JSON格式不正确,您会看到类似
的内容getJSON failed, status: parsererror, error: SyntaxError: JSON Parse error: Unrecognized token '/'
如果网址错误,您会看到类似
的内容getJSON failed, status: error, error: Not Found
如果您尝试从其他域获取JSON,违反Same-origin policy,此方法将返回空消息。请注意,您可以使用JSONP(具有limitations)或首选资源共享方法(CORS)来解决同源策略。
答案 1 :(得分:29)
直接来自文档:
重要:从jQuery 1.4开始,如果JSON文件包含语法错误,请求通常会无提示失败。
正如文档页面所说,getJSON只是
的简写方法$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
要获得失败行为,您可以像这样使用$ .ajax:
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback,
error: another callback
});
答案 2 :(得分:3)
您可以改为使用$.ajax
,并将dataType
选项设置为“json”。来自文档:
“json”:将响应评估为JSON 并返回一个JavaScript对象。在 jQuery 1.4解析了JSON数据 严谨的态度;任何格式错误的JSON都是 拒绝并抛出解析错误。 (有关更多信息,请参阅json.org 正确的JSON格式。)
答案 3 :(得分:0)
您应该查看此API的文档...它上面有.error。
答案 4 :(得分:0)