IE6 SP1+SSL+AJAX(XMLHttpRequest)=trouble

问题描述

在 IE 6 SP1 访问 https 站点, AJAX 会随机出现一个 winet 的状态码: 12152 。
网上 有不少人遇到了这困惑的状态码。

说明

  • Windows 下的 IE 里 new ActiveXObject(progId) 生成的 XMLHttpRequest 是 winet 的一部分。
  • IE 7 以下对 SSL ( 即 HTTPS) 的支持不够好。

解决方案

考虑

  • 如上述的情况基数人群很少,那可考虑短时间内不解决此问题。
  • 要解决而我们又不想彻底的抛弃 AJAX ,该怎么办。
    • 因为我们不仅仅只有 IE 6 ,还有 IE 7 和 IE 8 。
    • 所以不能因为 IE 6 SP1 或某些奇怪版本的 IE 用户而摒弃 AJAX )

要解决此问题,可以想

  • 把无刷新页面看做是一个与服务器沟通的桥梁的话,这座桥除了用 XMLHttpRequest 之外。
  • 还可以用 iframe 。形成一个 connection 的 adapter 。

除此之外可以将 AJAX 加一个比较快速的 「重试」( retry )方案:

      switch(this.requestor.status)
      {
        case 12029:
        case 12030:
        case 12031:
        case 12152:
        case 12159:
          // fixed ie ssl bug, retry send data
          var loader = this;
          setTimeout( function() { loader.execute.call(loader); }, 10);
          break;
          
        default:
          this.onError(this);
      }

-- EOF --

Comments