zoukankan      html  css  js  c++  java
  • 【转】ie6 sp1+ssl+ajax(XMLHttpRequest) = trouble

    遇到status = 12031错误,搜到此文:


     

    在ie6 sp1访问https站点,ajax会随机出现一个winet的状态码:12152。如果你还没有看到过这个困惑的状态码,请参看这里

    这至少可以说明两个问题

    • new ActiveXObject(progId)生成的XMLHttpRequest是winet的一部分。MS很喜欢资源重利用,从select这个怪胎就可以看出来了。
    • MS ie7以下对ssl的支持不够好。
    纵然ajax带来很好的用户体验,给无数前端开发的人员提供了就业机会。但是我的意见还是坚持的是,在没有ajax的时候,我们的web页面也要能成功的运行。
    那么,从上面这样的bad case看来,如何让我没有ajax也能照常用呢?

    让我们想想解决方案

    解决方案也得从长计议,

    1. 出现上述的情况基数人群很少很少,那么均衡整体项目考虑,我们可以短时间内可以不解决这个问题。
    2. 无论如何都解决掉这个问题,拔掉牙中这根刺。而我们又不想彻底的抛弃ajax,该怎么办。(因为我们不仅仅只有ie6,MS还有ie7和ie8。所以不能因为 sp1或某些奇怪版本的ie用户而摒弃ajax。)
    3. 如果1, 2都不成立,可以直接不用ajax,改用传统的提交方式。

    1和3没有什么可说了,第二种情况会更多一些,我们可以:
    • 把无刷新页面看做是一个与服务器沟通的桥梁的话,这座桥除了用XMLHttpRequest之外,还可以用iframe。形成一个connection的adapter。
    • ajax出现的异常情况下用普通的方式去提交表单。

    以下用一点小示例来说明问题用iframe回调的原理:
    点击此处http://www.never-online.net/code/js/iframe-callback/default.html 查看示例。

    请注意,当你的浏览器是ie6 sp1,装了高级版本的MSXML也是没有用的。因为这是与IE有关,与MSXML的版本没有任何关系。

    另外,再加一个比较快速的解决方案

    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);
    }
    

    转自:http://www.never-online.net/blog/article.asp?id=261

  • 相关阅读:
    mongodb安装及操作
    小白学jQuery
    python break 和continue区别
    pyqt5 Qlabel控件添加图片单击进入网站
    pyqt5 主窗口退出,子窗口退出问题
    pyqt5 关于主窗口闪退
    python 浮点数不精确原因
    定时器 sched模块
    python 获得文件大小、修改时间等系统信息
    原码
  • 原文地址:https://www.cnblogs.com/arliang/p/2072386.html
Copyright © 2011-2022 走看看