当前位置:  开发笔记 > 编程语言 > 正文

调用同步xmlhttprequest时IE挂起5分钟

如何解决《调用同步xmlhttprequest时IE挂起5分钟》经验,为你挑选了1个好方法。

我有一个Web应用程序并使用ajax回调我的网络服务器来获取数据.

有时(在相当不可预测的时刻,但它可以被复制)IE完全挂起5分钟(窗口显示Not Responding)然后返回并且xmlhttprequest对象响应错误12002.

我可以重现它的方式如下.

    使用按钮从主窗口(A)打开窗口(B)

    单击按钮打开窗口B时,窗口A调用同步ajax(PROC1).PROC1运行文件.

    新窗口(B)具有ajax代码(PROC2)并调用服务器异步.运行很好

    用户在PROC2完成之后但在返回数据之前关闭窗口B.

    在主窗口中(a)用户再次单击按钮.PROC1再次运行,但现在send()调用阻塞了5分钟.

请帮忙.我一直在寻找3天.

请注意:*我无法在firefox中测试它(该应用程序不兼容Firefox)*我必须使用同步调用(这就是构建应用程序的方式,并且需要花费太多的开发人员来重写它)

为什么会发生这种情况以及如何解决这个问题?



1> Dave Lockhar..:

你是对的Jaap,这与Internet Explorer的连接限制为2有关.出于某种原因,IE不会释放与关闭窗口中执行的AJAX请求的连接.

我的情况非常相似,只是稍微简单一些:

用户在窗口A中单击以打开窗口B.

Window B执行需要一段时间的Ajax调用

在Ajax调用返回之前,用户关闭Window B.与此调用的连接"泄漏".

重复1次,直到两个可用连接都"泄露"

浏览器变得没有响应

您可以尝试的一种技术(在您找到的文章中提到)似乎有效,是在页面的卸载事件中中止XmlHttp请求.

所以类似于:

var xhr = null;

function unloadPage() {
  if( xhr !== null ) {
    xhr.abort();
  }
}

另一个选择是使用同步AJAX调用,它将阻塞直到调用返回,基本上锁定浏览器.鉴于您的具体情况,这可能是也可能是不可接受的.

// the 3rd param is whether the call is asynchronous
xhr.open( 'get', 'url', false );

最后,如其他地方所述,您可以调整IE在注册表中使用的最大连接数.期待访问您网站的访问者然而这样做是不现实的,并且它实际上不会解决问题 - 只是推迟它发生.作为旁注,IE8将允许6个并发连接.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有