如何处理getJSON调用中的错误?我试图引用一个跨域脚本服务使用jsonp,你如何注册一个错误方法?


当前回答

在某些情况下,使用这种方法可能会遇到同步问题。 我在setTimeout函数中编写了回调调用,它可以同步工作=)

E.G:

function obterJson(callback) {


    jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {

    setTimeout(function(){
        callback(data);
    },0);
}

其他回答

这是一个相当老的线程,但它确实出现在谷歌搜索,所以我想我将添加一个jQuery 3答案使用承诺。这个片段还显示:

您不再需要切换到$。Ajax来传递您的不记名令牌 使用.then()来确保您可以同步处理任何结果(我遇到了这个问题。always()回调触发太快-尽管我不确定这是100%正确的) 我使用.always()来简单地显示结果,无论是积极的还是消极的 在.always()函数中,我用HTTP状态代码和消息体更新了两个目标

代码片段如下:

    $.getJSON({
         url: "https://myurl.com/api",
         headers: { "Authorization": "Bearer " + user.access_token}
    }).then().always(   function (data, textStatus) {
        $("#txtAPIStatus").html(data.status);
        $("#txtAPIValue").html(data.responseText);
    });

$. getjson()是一种常规AJAX调用的抽象,在这种调用中,您必须告诉您需要一个JSON编码的响应。

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

可以用两种方式处理错误:一般地(在实际调用AJAX调用之前配置它们)或特定地(使用方法链)。

“generic”是这样的:

$.ajaxSetup({
      "error":function() { alert("error");  }
});

以及“具体”的方式:

$.getJSON("example.json", function() {
  alert("success");
})
.done(function() { alert("second success"); })
.fail(function() { alert("error"); })
.always(function() { alert("complete"); });

有人能告诉卢西亚诺以下几点吗? 我刚刚测试了他的答案——有一个类似的问题——结果非常完美……

我甚至还加上了我的50美分:

.error(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
    })

$.getJSON(“example.json”, function() { 警报(“成功”); }) .success(function() { alert(“second success”); }) .error(function() { alert(“error”); })

在jQuery 2.x中已修复;jQuery 1。X你将永远不会得到一个错误回调

为什么不

getJSON('get.php',{cmd:"1", typeID:$('#typesSelect')},function(data) {
    // ...
});

function getJSON(url,params,callback) {
    return $.getJSON(url,params,callback)
        .fail(function(jqXMLHttpRequest,textStatus,errorThrown) {
            console.dir(jqXMLHttpRequest);
            alert('Ajax data request failed: "'+textStatus+':'+errorThrown+'" - see javascript console for details.');
        })
}

??

有关使用的.fail()方法(jQuery 1.5+)的详细信息,请参见http://api.jquery.com/jQuery.ajax/#jqXHR

由于jqXHR是由函数返回的,因此类似于

$.when(getJSON(...)).then(function() { ... });

是可能的。