【问题标题】:$.getJSON get status$.getJSON 获取状态
【发布时间】:2012-11-01 03:57:33
【问题描述】:

执行跨域查询,如果运行的URL不可用(404),如何执行某个功能? 我尝试这样的事情:

$.getJSON({
url:'example.php?callback=?',
statusCode: {
404:function(){alert('404');}
},
success :function(data){//do stuff}
});

【问题讨论】:

  • 您的url 参数后面不是缺少, 吗?
  • 您阅读文档了吗?
  • Bruno Vieira - 不,我在这里犯了一个错误,创建问题
  • 轨道上的光速竞赛 - 是的,我读过它,但不幸的是那里给出的例子没有帮助

标签: jquery http-status-code-404 getjson


【解决方案1】:

我发现这种方法可以解决我遇到的类似问题,我想以不同的方式处理特定的状态代码。例如下面的“404”代码。

$.getJSON(AJAX_URL, function(data) {
    //On Success do something.

}).fail(function(jqXHR) {
    if (jqXHR.status == 404) {
        alert("404 Not Found");
    } else {
        alert("Other non-handled error type");
    }
});

有3个参数传递给fail方法:

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});

错误回调选项的替代构造,.fail() 方法替换了已弃用的 .error() 方法。参考 deferred.fail() 了解实现细节。

有关 jQuery 文档,请参阅:
http://api.jquery.com/jQuery.ajax/#jqXHR
http://api.jquery.com/deferred.fail/

【讨论】:

  • IMO 这应该是公认的答案,因为它依赖于回调而不是依赖于响应的预定义超时。
【解决方案2】:
 $.getJSON({
       url:'example.php?callback=?'       
    },
      success :function(data){//do stuff}
    })
    .error(function(e, x) { if (x.status == 404) alert('404 - page was not available'); });

【讨论】:

    【解决方案3】:

    Mattthis question 中发布了一个很棒的answer,可能会解决您的问题。

    您必须在 JSON 对象上添加 success 属性

    var success = false;
    
    $.getJSON(url, function(json) {
        success = true;
        // ... do what you need to do here
    });
    
    // Set a 5-second (or however long you want) timeout to check for errors
    setTimeout(function() {
        if (!success)
        {
            // Handle error accordingly
            alert("Yup, 404"); // string was "Houston, we have a problem."
        }
    }, 5000);
    

    如果您没有预料到超时问题,KeYan 通过检查 XHR 状态属性提出了一个很好的建议。 我会投票支持他的解决方案,但我缺乏代表点数。

    【讨论】:

    • 您添加了{'success':'true'} 吗?
    • KeYan 示例不起作用...也许我做错了什么? var success = false; $.getJSON(sl+'/404/com.add.lics.php?callback=?',function(g){ success = true; }); setTimeout(function(){ if (!success){ alert("Houston, we have a problem."); } }, 5000);
    • 这实际上工作正常。您成功地捕捉到了 if 语句中的延迟!超时结束假定您的服务需要很长时间才能响应,因此是 404。
    • 编辑了字符串值以反映实际发生的情况,因为“问题”这个词似乎引起了一些混乱
    • 好的,我尝试将此示例与不同类型的链接一起使用,它可以工作。谢谢!
    【解决方案4】:

    获取 JSONP 请求的状态码本质上是不可能的。

    您可以向$.ajax 调用添加一般错误处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2021-12-18
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多