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系列之四:问题总结的更多相关文章

  1. 深入理解ajax系列第一篇——XHR对象

    × 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...

  2. Sql Server来龙去脉系列之四 数据库和文件

        在讨论数据库之前我们先要明白一个问题:什么是数据库?     数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...

  3. ASP.NET之Ajax系列(三)

    我们通过前两篇文章的学习,已经大致掌握了Ajax的实现方法,同时也可以对比出两种方式的优劣.但是我们还是没有搞清楚真正的ajax的实现原理,以及最原始的,未经过封装的ajax是什么样的,今天我们一起来 ...

  4. 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 ...

  5. .NET 4 并行(多核)编程系列之四 Task的休眠

    原文:.NET 4 并行(多核)编程系列之四 Task的休眠 .NET 4 并行(多核)编程系列之四 Task的休眠 前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消.本篇介绍Tas ...

  6. ajax系列之用jQuery的ajax方法向服务器发出get和post请求

    打算写个ajax系列的博文,主要是写给自己看,学习下ajax的相关知识和用法,以更好的在工作中使用ajax. 假设有个网站A,它有一个简单的输入用户名的页面,界面上有两个输入框,第一个输入框包含在一个 ...

  7. 基于jQuery的ajax系列之用FormData实现页面无刷新上传

    接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方 ...

  8. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  9. 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...

随机推荐

  1. Microsoft Windows Server 部署

    Microsoft Windows Server 部署 多重引导 计算机可以被设置多重引导,即在一台计算机上安装多个操作系统..在安装多重引导的操作系统时,还要注意版本的类型,一般应先安装版本低的,再 ...

  2. java根据freeMark模板生成内容

    根据ftl模板生成文件内容可以用来生成代码模板,如下所示: aa.ftl name : ${name} age : ${age} aa.java package mall_tools; import ...

  3. Sql Server 中锁的概念(1)

    Sql Server 中锁的概念   锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破 ...

  4. TWaver可视化编辑器的前世今生(四)电力 云计算 数据中心

    插播一则广告(长期有效) TWaver需要在武汉招JavaScript工程师若干 要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣基础 ...

  5. FFT NTT 模板

    NTT: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; # ...

  6. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

  7. SolrCloud架构

    原文链接 https://blog.csdn.net/dingzfang/article/details/42804489 1 核心概念 Collection Shard 均为逻辑上的概念 Core为 ...

  8. [WPF自定义控件]使用WindowChrome自定义Window Style

    1. 为什么要自定义Window 对稍微有点规模的桌面软件来说自定义的Window几乎是标配了,一来设计师总是克制不住自己想想软件更个性化,为了UI的和谐修改Window也是必要的:二来多一行的空间可 ...

  9. python mock模块使用(一)

    什么是mock unittest.mock是一个用于在Python中进行单元测试的库,Mock翻译过来就是模拟的意思,顾名思义这个库的主要功能是模拟一些东西. 它的主要功能是使用mock对象替代掉指定 ...

  10. 如何设置目标并发(或者目标RPS)?

    基本概念 首先您需要了解什么是并发用户.TPS 和它们之间的关系. 并发用户:指的是现实系统中同时操作业务的用户,在性能测试工具中一般称为虚拟用户(Virutal User).一般是站在客户侧评估的角 ...