• ajax问题总结


    在看文章前,先指定一个通用的变量xhrxhr代表ajax对象。

    测试浏览器:IEIE6FireFox2,其他的未测试。统称IE6IEFireFox2FF

        基本的

    1
    ,最经典的就是IE下的缓存问题了。
    如果使用的是get,那么在IE下出现缓存问题。导致代码只执行一次。解决办法就是加时间戳或者随机数,使url变为唯一,这样就不会出现IE下的缓存问题了,或者改为post提交。

    JScript code

    xhr.open("get","xxxx.aspx?_dc="+new Date().getTime(),true);

     




    2
    ajax对象属性的大小写问题
    w3c浏览器,如FF中,对大小写是敏感。如
    if(xhr.readystate==4)
    这种写法,在IE下是成立的,但是在FF下就行不通了,因为IE不区分大小写,FF是区分大小的。
    标准写法为if(xhr.readyState==4),同理还有属性 responseTextresponseXML


    3
    ajax状态0问题
    有些时候在测试ajax代码的时候,加了  xhr.status==200的判断后,一直不执行xhr.status==200的代码,这个就需要注意了。xhr.status==200是要通过服务器来浏览,并且服务器页面没有发生错误或者转向时才返回200状态的,此状态和你通过浏览器访问页面时服务器定义的状态一致。

    直接拖进浏览器浏览结果或者双击运行html页面的,未发生错误时,此时的xhr.status0,不是200

    所以可以多加一个xhr.status==0的判断。如下

    JScript code

    if(xhr.status==200||xhr.status==0){

     alert('ok');

    }

     



    直接拖进浏览器浏览结果或者双击运行html页面时,又出现一个问题,如果请求的是xml文件,那想当然的是使用responseXML属性返回xmlDom了,但是在IE返回不了xmlDom属性,解决办法如何呢,看下面的responseXML问题。

    4responseXML问题。
    要使用responseXML属性,请求的是xml文件或者设置了响应头为"text/xml"的动态页面了。要注意如果请求的是动态页面,一定不要忘记设置contenttype"text/xml"!!!!!!!!切记~~~~~~
    asp
            response.contenttype="text/html"
    asp.net
        Response.ContentType="text/html";
    php
            header("content-type:text/xml;");

    IE下有个问题,直接拖进浏览器浏览或者双击运行html预览效果时,请求的即使是xml文件,使用responseXML返回不了xmldom
    大家测试下就知道了,如下
    showbo.xml

    XML code

    <?xml version="1.0" encoding="utf-8"?>

    <showbo>

     <item>1</item>

     <item>2</item>

     <item>3</item>

     <item>4</item>

    </showbo>

     



    test.html

    JScript code

    function getajax(){

     if(window.XMLHttpRequest)return new XMLHttpRequest();

     else if(window.ActiveXObject)return new ActiveXObject("microsoft.xmlhttp");

    }

    var xhr=getajax();

    xhr.onreadystatechange=function(){

     if(xhr.readyState==4){

        if(xhr.status==200||xhr.status==0){

          var doc=xhr.responseXML,item=doc.getElementsByTagName("item");

          alert(item.length);//在IE输出为0,在FF下为4。似乎在IE下未生成xml的树结构,具体原因要问ms了。。

        }

        else alert('发生错误\n\n'+xhr.status);

     }

    }

    xhr.open("get","showbo.xml?_dc="+new Date().getTime(),true);

    xhr.send(null);

     



    解决办法就是使用microsoft.xmldom对象重新建立xml的树结构,如下

  • 相关阅读:
    Oracle第一课
    Web前端试题
    E
    Kingdom of Black and White
    D. Let's Go Hiking
    2021牛客寒假 第一场
    Codeforces Round #691 (Div. 2)
    CF1461D
    CF1461B
    浙财16th校赛 F因子
  • 原文地址:https://www.cnblogs.com/hannover/p/1639275.html
Copyright © 2020-2023  润新知