【问题标题】:How can I get information back from an Ajax call when internet connectivity is lost当 Internet 连接丢失时,如何从 Ajax 调用中获取信息
【发布时间】:2012-06-11 10:19:48
【问题描述】:

我有以下几点:

 $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

当我失去与 Internet 的连接时,会调用错误,但我在 responseText 中看不到任何内容。

有没有办法可以根据返回的 ajaxContent 中的状态信息找出不同类型的错误?如果有其他问题,我真的希望能够发出一条消息说“Internet 连接丢失”和另一条消息。

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    已更新。

    您应该在 $.ajax({}) 中的某处添加: timeout: 。此外,cache: false,在某些情况下可能会有所帮助。

    $.ajax 有据可查,你应该检查那里的选项,可能会发现一些有用的东西。

    JQuery Ajax - How to Detect Network Connection error when making Ajax call

    【讨论】:

    • 我非常不同意,因为状态是从服务器接收到的 HTTP 响应,所以获得一个(无论是 404 还是其他)都可以证明网络连接正常.
    【解决方案2】:
    $.ajax({ cache: false,
        url: "/Admin/Contents/GetData",
        data: { accountID: AccountID },
        success: function (data) {
            $('#CityID').html(data);
        },
        error: function (ajaxContext) {
            if(ajaxContext.status=="404")
             {
              //write your not found handler code here
             }
            else
            alert(ajaxContext.status)
        }
    });
    

    【讨论】:

    • 我看到有人说有三个参数。但是,如果我使用 ajaxContext 那么我仍然可以访问所有三个吗?
    • 我试图了解这三个对于 jqXHDR、textStatus 和 errorThrown 是否不同。
    • @CoDeaDDict :我非常不同意,因为状态是从服务器接收到的 HTTP 响应,所以得到一个(无论是 404 还是其他)都可以证明网络连接是可以的。请参阅 Sirko 的回答和我的 cmets。
    【解决方案3】:

    根据jQuery docu,错误函数接收三个参数:

    1. jqXHR
    2. textStatus:描述发生错误类型的字符串
    3. errorThrown:一个可选的异常对象,如果发生了

    它还指出:

    第二个参数(除了 null)的可能值是“timeout”、“error”、“abort”和“parsererror”。发生 HTTP 错误时,errorThrown 会接收 HTTP 状态的文本部分,例如“未找到”或“内部服务器错误”。

    所以你可能想看看第二个和第三个参数的内容。

    【讨论】:

    • 三个参数都需要吗?如果我只是使用 ajaxContext,似乎它们也会被发送出去。在那里我得到 ajaxContext.readyState、ajaxContext.Status 和 ajaxContext.StatusText
    • @Gemma 在 JS 中,您不需要捕获函数的所有参数。只有参数的顺序很重要。因此,如果您在函数头中指定两个参数,则只会填充那些参数,而将删除第三个参数。 (尽管定义了多少参数,都可以访问函数的所有参数,但这里不需要它们)
    • @Sirko 几乎是对的:看看第二个论点。如果为 null,您可以确定没有网络连接问题,第三个参数是服务器发回的 HTTP 状态。如果不为空,我认为您无法确定:“超时”和“错误”是网络连接中断的线索,但没有明确的证据(可能是网络延迟或甚至服务器延迟)。 “parsererror”是一个以某种方式收到的响应的线索,因此是一个相当可操作的网络。但是响应也可能由于网络问题而损坏......并且“中止”可能是因为用户。或者不。
    【解决方案4】:

    如果您的意思是不同类型的响应结果,它就在这里 - http://api.jquery.com/jQuery.ajax/ - statusCode 参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-11
      • 2012-04-19
      • 2014-05-03
      • 2021-02-28
      • 1970-01-01
      • 2012-02-24
      • 2014-08-23
      • 1970-01-01
      相关资源
      最近更新 更多