为什么$ .getJSON默默地失败?
当返回的数据不是有效的JSON时,jQuery的$.getJSON
静静地失败似乎非常不方便。 为什么这是无声的失败实施? 什么是最简单的方式来执行更好的失败行为getJSON(例如抛出一个exception, console.log()
或其他)?
您可以使用
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 )的首选方法来解决同源策略。
直接从文档:
重要:从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 });
您可以使用$.ajax
,并将dataType
选项设置为“json”。 从文档:
“json”:将响应评估为JSON并返回一个JavaScript对象。 在jQuery 1.4中,JSON数据被严格分析; 任何格式不正确的JSON都会被拒绝, 并引发parsing错误 。 (有关正确的JSON格式的更多信息,请参阅json.org。)
你应该看看这个API的文档…它有一个错误的。
如果您要求JSONP作为响应,如果没有响应(例如,networking中断),您将得到沉默的失败。 详情请参阅此主题 。