首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JQuery Ajax -如何在进行Ajax调用时检测网络连接错误

JQuery Ajax -如何在进行Ajax调用时检测网络连接错误
EN

Stack Overflow用户
提问于 2009-11-14 01:19:56
回答 7查看 110.6K关注 0票数 96

我有一些Javascript JQuery代码,它每隔5分钟对服务器进行一次Ajax调用,这是为了让服务器会话保持活动状态,并让用户保持登录状态。我在JQuery中使用$.ajax()方法。这个函数似乎有一个'error‘属性,我试图在用户的互联网连接中断的情况下使用它,以便KeepAlive脚本继续运行。我使用了以下代码:

var keepAliveTimeout = 1000 * 10;

function keepSessionAlive()
{
    $.ajax(
    {
        type: 'GET',
        url: 'http://www.mywebapp.com/keepAlive',
        success: function(data)
        {
            alert('Success');

            setTimeout(function()
            {
                keepSessionAlive();
            }, keepAliveTimeout);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown)
        {
            alert('Failure');

            setTimeout(function()
            {
                keepSessionAlive();
            }, keepAliveTimeout);
        }
    });
}

当我运行它时,我会在屏幕上每隔10秒在一个警告框中弹出“成功”,这很好。然而,一旦我拔下网线,我什么也得不到,我期望错误函数被调用,并看到一个“失败”警告框,但什么也没有发生。

我假设'error‘函数只用于从服务器返回的非'200’状态码,这是正确的吗?在进行Ajax调用时,有没有办法检测网络连接问题?

EN

回答 7

Stack Overflow用户

发布于 2015-02-09 15:25:08

// start snippet
error: function(XMLHttpRequest, textStatus, errorThrown) {
        if (XMLHttpRequest.readyState == 4) {
            // HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)
        }
        else if (XMLHttpRequest.readyState == 0) {
            // Network error (i.e. connection refused, access denied due to CORS, etc.)
        }
        else {
            // something weird is happening
        }
    }
//end snippet
票数 105
EN

Stack Overflow用户

发布于 2009-11-14 04:14:02

您只需在$.ajax({})中的某个位置添加:timeout: <number of miliseconds>,即可。此外,在一些情况下,cache: false,可能会有所帮助。

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

祝好运!

票数 13
EN

Stack Overflow用户

发布于 2009-11-14 04:30:45

因为我不能重复这个问题,所以我只能建议在ajax调用超时的情况下尝试。在jQuery中,您可以使用$.ajaxSetup设置它(并且它对所有$.ajax调用都是全局的),或者您可以专门为您的调用设置它,如下所示:

$.ajax({
    type: 'GET',
    url: 'http://www.mywebapp.com/keepAlive',
    timeout: 15000,
    success: function(data) {},
    error: function(XMLHttpRequest, textStatus, errorThrown) {}
})

JQuery将为您的调用注册一个15秒的超时时间;此后,如果没有来自服务器的http响应代码,jQuery将执行错误回调,并将textStatus值设置为" timeout“。这样,您至少可以停止ajax调用,但无法将实际的网络问题与连接丢失区分开来。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1730692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档