javascript - 第一个 XMLHttpRequest 失败但仅在 IE9 上

标签 javascript debugging ssl xmlhttprequest internet-explorer-9

我有一个网站,我输入用户名/密码并单击登录按钮。登录按钮创建一个 XMLHttpRequest 对象,并触发它。

在 Chrome、Firefox、Opera、Safari、Android 设备、iOS 设备上,这工作正常。 只要我使用 HTTP 地址而不使用 HTTPS,IE9 就可以正常工作。

在 HTTPS 上,IE9 的行为如下:

第一个登录请求永远不会返回任何东西。 F12 屏幕确实在网络选项卡中显示了我的登录请求,并且一切看起来都是正确的。脚本标签永远不会抛出错误。什么也没有发生。

这是疯狂的部分: - 如果我第二次点击登录,它确实有效。 - 如果我在浏览器上单击刷新,然后登录,那也可以!

我提出如下要求:

   var x = new XMLHttpRequest();
   x.open("POST", "/Relative/URL/Path", true);
   x.setRequestHeader("Content-Type", "text/plain");
   x.onreadystatechange = function () {
      if ((x.readyState == 4) && (x.status == 200)) {
            // handle callback
      }
   }
   x.send(my request);

如果失败,调试器将从 x.send() 行转到 onreadystatechange 代码。 readyState 将为 1。这将是我最后一次调试,因为没有其他任何事情发生。

如有任何想法,我们将不胜感激。

[编辑]:我让一个请求去看看会发生什么。 onreadystatechange 事件再次触发,readyState = 4 和 status = 12152。IE9 的 F12 屏幕中的 WebView 显示结果为 Aborted,所用时间为 1589.07s。谷歌搜索显示这意味着服务器上的连接已关闭。

[编辑 2]:根据下面的评论,我重新编写了这段代码以仅使用 jQuery 的 ajax() 方法。我认为这可能有机会消除我的错误代码。没有这样的运气。发生相同的行为。

   $.ajax({
      "url": sUrl,
      "success": function (data, textStatus, x) {
         workerCallback(data, id, "");
      },
      "error": function (x, testStatus, errorThrown) {
         workerCallback("nc", id, errorThrown);
      },
      "contentType": "text/plain",
      "data": JSON.stringify(req),
      "dataType": "json",
      "timeout": 1600000,
      "type": "POST"
   });

[最终更新:] 我已经更新了代码。如果发生超时,我只需重新发布相同的请求 - 仅一次。相当黑客,但它的工作原理。除非有人找到解决方案,否则我会将赏金分配给人们在下面提出的一些有用的想法。

最佳答案

这似乎是一个奇怪的问题,如果不在 https 站点上查看代码就很难对其进行测试。

如果您想要快速修复,您可以尝试执行初始(虚拟)请求,然后使用较短的 setTimeout 立即中止它并发出第二个(真实)请求。

根据您的描述,它应该可以工作。

关于javascript - 第一个 XMLHttpRequest 失败但仅在 IE9 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12673795/

相关文章:

apache - TLS 握手密码列表

javascript - 我可以将 JS 脚本放在页脚上方而不是页脚下方 </body> 标记之前吗

javascript - 如何使用 reducer 和处理事件从事件数组中更新事件?

javascript - 单击时使用 Raycaster 更改 Box 面的颜色

ios - 当针对 iOS 进行 Xcode 调试时,GStreamer 出现不必要的启动延迟和单元测试崩溃

mysql - 使用 ssl 连接到 MySQL 服务器

ssl - 使用还是不使用 SSL?为什么总是使用 SSL?

javascript - 我不明白数组是如何工作的

java - 使用 FragmentPagerAdapter 时 Android 崩溃

C++ VS 调试代码,设置你自己的调试标志