Ajax系列之四:问题总结
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进制数据生成字符串对象,使用正则什么的获取相应的值。
Ajax系列之四:问题总结的更多相关文章
- 深入理解ajax系列第一篇——XHR对象
× 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- ASP.NET之Ajax系列(三)
我们通过前两篇文章的学习,已经大致掌握了Ajax的实现方法,同时也可以对比出两种方式的优劣.但是我们还是没有搞清楚真正的ajax的实现原理,以及最原始的,未经过封装的ajax是什么样的,今天我们一起来 ...
- Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程
原文:Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程 Red Gate系列之四 SQL Data Compare ...
- .NET 4 并行(多核)编程系列之四 Task的休眠
原文:.NET 4 并行(多核)编程系列之四 Task的休眠 .NET 4 并行(多核)编程系列之四 Task的休眠 前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消.本篇介绍Tas ...
- ajax系列之用jQuery的ajax方法向服务器发出get和post请求
打算写个ajax系列的博文,主要是写给自己看,学习下ajax的相关知识和用法,以更好的在工作中使用ajax. 假设有个网站A,它有一个简单的输入用户名的页面,界面上有两个输入框,第一个输入框包含在一个 ...
- 基于jQuery的ajax系列之用FormData实现页面无刷新上传
接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方 ...
- .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解
更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...
随机推荐
- Element UI tree 回显问题
Part.1 问题 写项目时遇到一个棘手的问题,在做关于权限功能时,点击修改需要显示角色原本对应的权限.涉及到了 tree 组件回显,但是有一个很尴尬的问题:tree 组件只要父节点选中,那么子节点就 ...
- 【收藏】史上最全的浏览器 CSS & JS Hack 手册
浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技能.如果有一份浏览器 Hack 手册,那查询起来就方便多了.这篇文章就向 ...
- 使用html2canvas实现网页截图,并嵌入到PDF
使用html2canvas实现网页截图并嵌入到PDF 以前我们只能通过截图工具进行截取图像.这使得在业务生产中,变得越来越不方便.目前的浏览器功能越来越强大,H5也逐渐普及,浏览器也可以实现截图了.这 ...
- 洛谷——P3939 数颜色(暴力vecotr+二分)
P3939 数颜色 $vecotr$里二分就是好用,全是$STL$ 颜色数目比较少,可以对每一种颜色弄一个$vector$记录一下,查找$l,r$内颜色数为$x$的兔子数,直接在$G[x]$这个$ve ...
- UVa-1585-得分
#include <stdio.h> #include <string.h> int main() { char s[100]; int T; scanf("%d&q ...
- Linux基础测试
目 录 第1章 文件及目录课后作业 1 第2章 Linux打包与压缩习题 1 第3章 Linux系统VIM编辑器习题 1 文件及目录课后作业 从/proc/meminfo中过滤出 ...
- solr中的Tokenizer Filter
Tokenizer Tokenizer 的工作是将文本流分解为令牌,其中每个令牌(通常)是文本中字符的子序列.分析器知道它配置的字段,但 tokenizer 不是.Tokenizers 从字符流(Re ...
- 杭电 2141 Can you find it? (二分法)
Description Give you three sequences of numbers A, B, C, then we give you a number X. Now you need t ...
- openstack创建虚拟机之后使用ssh登陆的解决办法
创建一个虚机之后:若果想要在horizon的控制台上登录操作,第一步.需要先使用ssh从controller上修改密码 从controller上登录: ssh ubuntu@虚机ip sudo su ...
- mybatis动态sql foreach的用法
<select id="findUserByIds" parameterType="com.pojo.QueryVo" resultType=" ...