为什么$ .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的文档…它有一个错误的。

http://api.jquery.com/jQuery.getJSON/

如果您要求JSONP作为响应,如果没有响应(例如,networking中断),您将得到沉默的失败。 详情请参阅此主题 。