为什么$ .getJSON会无声地失败?

时间:2011-03-30 21:44:20

标签: jquery json error-handling silent

当返回的数据不是有效的JSON时,jQuery的$.getJSON无声地失败似乎非常不方便。为什么这是以无声失败实现的?使用更好的失败行为执行getJSON的最简单方法是什么(例如抛出异常,console.log()或其他什么)?

5 个答案:

答案 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。

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

答案 4 :(得分:0)

如果您要求JSONP作为响应,如果没有响应(例如网络中断),您将收到静默失败。有关详细信息,请参阅error file