Ajax系列之四:问题总结_xhr.onload 什么情况下status 不定于200-程序员宅基地

技术标签: web应用开发  ajax  javascript  

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是要通过服务器来浏览,并且服务器页面没有发生错误或者转向时才返回200状态的,此状态和你通过浏览器访问页面时服务器定义的状态一致。 
直接拖进浏览器浏览结果或者双击运行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进制数据生成字符串对象,使用正则什么的获取对应的值。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhanghongjie0302/article/details/38052275

智能推荐

React 最佳实践(2)_react await actions.-程序员宅基地

文章浏览阅读444次。JSX1、标签具体以实际 eslint 规则和格式化工具为准,不用太过关心(1)当标签没有子元素时,应使用自闭合的标签// Good<Component />// Bad<Component></Component>(2) 有多行属性,关闭标签另起一行<Component foo="foo" bar="bar" other="other" />(3)闭合前留一个空格<Component />(4)JSX 标签最外层_react await actions.

HDU - 6739 2019CCPC秦皇岛赛区 I. Invoker(DP+思维)_ccpc秦皇岛2019-程序员宅基地

文章浏览阅读279次。问题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6739问题简述:在 dota2 中有一个叫做祈求者(Invoker)的英雄,在游戏中他有三个基础技能:冰(Quas),雷(Wex),火(Exort),每施展一个技能就可以获得相应属性的一个法球(element)。但是祈求者同时最多只能有三个法球,即如果他在有三个法球的状态下又使用了某个法球技能,..._ccpc秦皇岛2019

QReadWriteLock-官翻-程序员宅基地

文章浏览阅读554次。类提供读写锁定。QT += core此类中所有函数都是的。_qreadwritelock

这是一个tg群组索引机器人,群组收录,群组索引_tg机器人读取群信息-程序员宅基地

这是一个tg群组索引机器人,功能包括群组收录、索引机器人、后台管理等,具有积分管理、自动回复、广告管理、消费管理等功能。

(转)淘淘商城系列——初始SolrCloud-程序员宅基地

文章浏览阅读40次。http://blog.csdn.net/yerenyuan_pku/article/details/72944611本文我只是简单介绍一下SolrCloud,如果大家要是感兴趣的话,可以参考SolrCloud之分布式索引及与Zookeeper的集成这篇文章进行学习哟!SolrCloud的概述Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库;Solr是以Lucene为...

python全栈基础试题_Python 全栈:程序员必备算法练习-程序员宅基地

文章浏览阅读109次。334 程序员要知道什么是算法?我们一直在讲算法,算法,那么什么是一个算法呢?算法就是用来解决特定问题的指令序列,这句话并不难理解,因为我们平时一直就在写代码,写这些代码当然不是徒劳的,是为解决某个特定问题,代码必然也是指令序列,所以问题出现了:我们平时写的代码也能叫做算法吗?从算法的定义看,的确是这样,我们平时就是一直在写算法,只不过有些读者编写的算法代码偏向于业务逻辑,更多涉及前后端框架、数据..._def f(n): if n==1: return 0 elif n%2!=0: n=n-1 return 1+f(n) else: return n/

随便推点

微信公众号文章复制到服务器后台,微信个人公众号开发-打通后台服务器任督二脉...-程序员宅基地

文章浏览阅读447次。上篇文章 和大家分享了如何搭建免费的微信个人公众号开发所需要的后台服务器.这篇就来继续说说如何让你的公众号与后台服务器交互.一. 微信公众号接口准备这里我们要用前面搭建的aws服务器上部署的flask web应用来为微信公众号提供接口.修改flaskserver.pynano /var/www/flaskserver/flaskserver.py把代码截个图, 大家看下代码层次.以上代码包含了微..._微信公众号后台消息保存服务器

【太虚AR_v0.1】使用教程 | 图像识别(多目标)_太虚ar实现拍照识别功能-程序员宅基地

文章浏览阅读1.2k次。太虚AR(VOID AR)官方网站:https://www.voidar.net 官方QQ群:277574712 技术支持:[email protected] 商务合作:[email protected] 微信公众号:voidar一、简介用多张细节特征丰富的平面静态图像作为标识物(Marker),进行精准识别及跟踪。二、阅读指南本教程主要介绍如何在Unity环境下进行操作。 默认读者您拥有一定的软_太虚ar实现拍照识别功能

Ubuntu18.04+ZED SDK安装+ZED Python API+zed ros wrapper安装 手把手详细教程_ubuntu中zed-python-api 包-程序员宅基地

文章浏览阅读5.3k次,点赞13次,收藏68次。Ubuntu18.04+ZED SDK安装+ZED Python API+zed ros wrapper安装 手把手详细教程_ubuntu中zed-python-api 包

WPS表格操作-跨工作簿引用数据并同步更新_wps跨工作簿引用数据,数据自动更新-程序员宅基地

文章浏览阅读6.3k次。说明:跨工作簿汇总数据,可自动更新_wps跨工作簿引用数据,数据自动更新

ArcMap将excel数据转换为shp_arcmap怎么保存为shp文件-程序员宅基地

文章浏览阅读2.8k次。经常使用ArcMap生成一些专题图,需要把EXCEL数据叠加到ArcGIS中,如果EXCEL数据中有经纬度的话,其实可以很方便的把EXCEL数据转换成shp数据。步骤一 :将EXCEL数据转换成CSV(非必须)这并不是必须的一步,但是如果EXCEL中只有一个sheet中有数据的话,强烈推荐这种方法,转换成CSV可以减少很多错误。转换方法也很简单,使用Office打开数据表,另存为csv文件..._arcmap怎么保存为shp文件

实例1.1 最大子列和问题 (20point(s))_最大子列和测试实例-程序员宅基地

文章浏览阅读99次。实例1.1 最大子列和问题 (20point(s))给定K个整数组成的序列{ N1, N2, …, NK},“连续子列”被定义为{ Ni, Ni+1, …, Nj},其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样例等价,测试_最大子列和测试实例

推荐文章

热门文章

相关标签