【问题标题】:AJAX Requests and Connection Timeout: Chrome doesn't timeout after over 15 hours, but what about IE?AJAX 请求和连接超时:Chrome 超过 15 小时后不会超时,但 IE 呢?
【发布时间】:2012-06-27 20:32:51
【问题描述】:

我正在编写一个 Web 应用程序,它从客户端浏览器获取脚本输入并通过 AJAX 将其发送到 Java servlet。收到脚本后,Java 类执行脚本并将一些信息发送回网页。

我现在正在测试的 Web 应用程序的一个重要组件是连接超时以及浏览器连接何时/是否会在很长一段时间后超时。对我来说,重要的是在 Java servlet 发送响应之前连接不会超时,或者至少应该处理超时。

我已经研究了处理这个问题的方法,我对需要做什么有一个模糊的理解,但首先,我决定尝试让连接超时,以了解在没有任何类型的情况下一切将如何表现的错误处理。昨天,我从客户端的脚本输入中向 servlet 发送了一个命令,该命令告诉 servlet 休眠到今天早上。今天早上回来发现,在 Chrome 中,成功接收到了 servlet 响应,并愉快地在浏览器中显示了自己。

在 IE7 中,我没有那么幸运 :(

在等待响应超过 15 小时 后,IE7 超时,而 Chrome 没有。我想要么两者都会超时,要么都不会。

另外,知道我正在使用 Struts2 框架可能会有所帮助。

谁能解释一下?

谢谢!

附:我试图在我的问题解释中尽可能详细,但我很乐意提供任何额外的信息。我也没有包含代码,因为我认为没有任何相关的,但是如果您想查看一些代码,请再次告诉我您希望我包含哪些代码。

【问题讨论】:

    标签: ajax google-chrome internet-explorer-7 timeout connection


    【解决方案1】:

    事实证明,Chrome 非常棒,而 IE 则不是(惊喜!)。这是我很确定发生的事情:

    在 ajax 调用中,由于没有设置超时,Chrome 让超时默认为 0,即永不超时。

    IE7 是令人讨厌的浏览器(不幸的是,我必须为其开发),不希望发生这种情况,因此它坚持使用注册表设置的 60 分钟默认超时。

    JQuery 和 AJAX 通过一些长轮询(或者至少我理解的长轮询)使处理这个错误变得轻而易举。这是我所做的:

    初始 AJAX 请求(包含在函数中):

    $.ajax({
    
                beforeSend: function() {
    
                    inUse = true;
                    disableInput();
    
                },
    
                url: "executeScript.do",
                data: params,
                dataType: "text",
                type: "post",
                success: function(responseText) {
    
                    onSuccess(responseText);
    
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    if(textStatus == "timeout") {
                        pollServlet();
                    }               
                }
            });
    ...
    

    长轮询(?)

    function pollServlet() {
    
    var params = "testID=" + document.getElementById("testIDValue").value;
    
    $.ajax({
        url: "servletQuery.do",
        dataType: "text",
        type: "post",
        data: params,
        success: function(response) {
    
            if(!isNaN(parseInt(response, 10))) {
                setTimeout(pollServlet, parseInt(response, 10));
            } else {
                onSuccess(response);
            }
        }
    });
    

    }

    这行得通!然而,我注意到的一件事是 IE7 在超时而不是“超时”时返回“错误”的文本状态......奇怪!

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      相关资源
      最近更新 更多