$.getJSON
当返回的数据不是有效的 JSON 时,jQuery 静默失败似乎很不方便。为什么这是以静默失败的方式实现的?以更好的失败行为执行 getJSON 的最简单方法是什么(例如抛出异常console.log()
,或其他)?
问问题
38263 次
5 回答
88
您可以使用
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 '/'
如果 URL 错误,您将看到类似
getJSON failed, status: error, error: Not Found
如果您尝试从另一个域获取 JSON,违反了同源策略,此方法将返回一条空消息。请注意,您可以使用 JSONP(有其局限性)或跨域资源共享 ( CORS ) 的首选方法来解决同源策略。
于 2012-04-27T14:01:45.307 回答
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
});
于 2011-03-30T21:48:37.163 回答
3
您可以$.ajax
改用,并将dataType
选项设置为“json”。从文档中:
“json”:将响应评估为 JSON 并返回一个 JavaScript 对象。在 jQuery 1.4 中,JSON 数据以严格的方式解析;拒绝任何格式错误的 JSON并引发解析错误。(有关正确的 JSON 格式的更多信息,请参阅 json.org。)
于 2011-03-30T21:48:22.197 回答
0
你应该看看这个 API 的文档......它上面有一个 .error 。
于 2011-03-30T21:48:17.683 回答
0
如果您请求 JSONP 作为响应,如果没有响应(例如网络中断),您将获得静默失败。有关详细信息,请参阅此线程。
于 2016-01-13T17:41:08.447 回答