您的位置:首页 > 其它

Ajax系列之四:问题总结

2017-07-13 20:08 183 查看
1。最经典的就是ie下的缓存问题了。

假设使用的是get。那么在ie下出现缓存问题。导致代码仅仅运行一次。

解决的方法就是加时间戳或者随机数,使url变为唯一,这样就不会出现ie

下的缓存问题了,或者改为post提交。

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

2,ajax对象属性的大写和小写问题

在w3c浏览器。如ff中。对大写和小写是敏感。如

if(xhr.readystate==4)这样的写法。在ie下是成立的,可是在ff下即可不通了,由于ie不区分大写和小写,ff是区分大小的。

标准写法为if(xhr.readyState==4),同理还有属性 responseText。responseXML,status。

还有状态转换函数xhr.onreadystatechange。要注意所有为小写

3,ajax状态0问题

有些时候在測试ajax代码的时候,加了 xhr.status==200的推断后,一直不运行xhr.status==200的代码,这个就须要注意了。

xhr.status==200是要通过server来浏览。而且server页面没有错误发生或者转向时才返回200状态的,此状态和你通过浏览器訪问页面时server定义的状态一致。

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

所以能够多加一个xhr.status==0的推断。例如以下

复制代码代码例如以下:

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

alert('ok');

}

直接拖进浏览器浏览结果或者双击执行html页面时。又出现一个问题,假设请求的是xml文件。那想当然的是使用responseXML属性返回xmlDom了。可是在ie返回不了xmlDom属性,解决的方法怎样呢。看以下的responseXML问题。

4,responseXML问题。

要使用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

复制代码代码例如以下:

<showbo>

<item>1item>

<item>2item>

<item>3item>

<item>4item>

</showbo>

test.html

复制代码代码例如以下:

function getajax(){

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

else if(window.ActiveXObject)return newActiveXObject("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="+newDate().getTime(),true);

xhr.send(null);

解决的方法就是使用microsoft.xmldom对象又一次建立xml的树结构。例如以下

复制代码代码例如以下:

xhr.onreadystatechange=function(){

if(xhr.readyState==4){

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

var doc=xhr.responseXML;

if(document.all&&xhr.status==0){//为ie而且直接托进浏览器的时重构xml的树结构

doc=new ActiveXObject("microsoft.xmldom");

doc.loadXML(xhr.responseText);

doc=doc.documentElement;

}

var item=doc.getElementsByTagName("item");

alert(item.length);

}

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

}

}

5,为post提交时须要注意的。

假设为post提交时。注意要设置content-type为"application/x-www-form-urlencoded",这样在动态页才干够使用request/request.form/request.querystring对象通过键获取值,否则得使用2进制数据。然后自己分析2进制数据生成字符串对象,使用正则什么的获取相应的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: