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

  • 相关阅读:
    find module providing package github.com/go-sql-driver/mysql: working directory is not part of a module
    深度学习中的epoch、batchsize、iterations的理解
    淘宝软件质量属性分析
    Git
    多线程
    Spark基础之Scala
    机器学习十讲第十讲
    机器学习十讲第九讲
    机器学习十讲第六讲
    本地MarkDown优雅发表
  • 原文地址:https://www.cnblogs.com/arliang/p/2072386.html
Copyright © 2011-2022 走看看