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


当前回答

这是一个相当老的线程,但它确实出现在谷歌搜索,所以我想我将添加一个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);
    });

其他回答

这是一个相当老的线程,但它确实出现在谷歌搜索,所以我想我将添加一个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);
    });

我也面临同样的问题,但我没有为失败的请求创建回调,而是简单地用json数据对象返回一个错误。

如果可能的话,这似乎是最简单的解决方案。下面是我使用的Python代码示例。(使用Flask, Flask的jsonify f和SQLAlchemy)

try:
    snip = Snip.query.filter_by(user_id=current_user.get_id(), id=snip_id).first()
    db.session.delete(snip)
    db.session.commit()
    return jsonify(success=True)
except Exception, e:
    logging.debug(e)
    return jsonify(error="Sorry, we couldn't delete that clip.")

然后你可以这样检查Javascript;

$.getJSON('/ajax/deleteSnip/' + data_id,
    function(data){
    console.log(data);
    if (data.success === true) {
       console.log("successfully deleted snip");
       $('.snippet[data-id="' + data_id + '"]').slideUp();
    }
    else {
       //only shows if the data object was returned
    }
});

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

E.G:

function obterJson(callback) {


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

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

我知道已经有一段时间没有人在这里回答了,发帖者可能已经从这里或其他地方得到了答案。然而,我确实认为这篇文章将帮助任何寻找在执行getJSON请求时跟踪错误和超时的方法的人。因此下面是我对这个问题的回答

getJSON结构如下(可以在http://api.jqueri.com):上找到)

$(selector).getJSON(url,data,success(data,status,xhr))

大多数人使用

$.getJSON(url, datatosend, function(data){
    //do something with the data
});

他们使用url var提供到JSON数据的链接,使用datatosend作为添加“?callback=?”和其他必须发送以获得正确JSON数据返回的变量的地方,使用success函数作为处理数据的函数。

但是,您可以在成功函数中添加status和xhr变量。状态变量包含以下字符串之一:"success", "notmodified", "error", "timeout",或"parsererror", xhr变量包含返回的XMLHttpRequest对象 (可以在w3schools上找到)

$.getJSON(url, datatosend, function(data, status, xhr){
    if (status == "success"){
        //do something with the data
    }else if (status == "timeout"){
        alert("Something is wrong with the connection");
    }else if (status == "error" || status == "parsererror" ){
        alert("An error occured");
    }else{
        alert("datatosend did not change");
    }         
});

这样可以很容易地跟踪超时和错误,而不必实现自定义的超时跟踪器,该跟踪器在请求完成后启动。

希望这能帮助那些仍在寻找这个问题答案的人。

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

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

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