关于JS中ajax的XMLHttpRequest对象的使用
来源:互联网 发布:烽火通信软件测试招聘 编辑:程序博客网 时间:2024/06/11 15:57
JS中的Ajax技术的核心就是XMLHttpRequest对象。这个对象充当着浏览器中的脚本(客户端)与服务器之间的中间人的角色。以往的请求都由浏览器发出,而JavaScript通过这个对象可以自己发送请求,同时也自己处理响应。
现在我们先创建一个html页面,命名为test.html
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"/> <title>Ajax学习</title> <script type="text/javascript" src="test.js"></head><body><div id="testdiv"></div></body></html>
其中引的test.js文件与当前html页面文件同在一个文件夹下
为了模拟服务器的响应,在test.html所在文件夹下再建一个文本文件test.txt,
包含内容:”这里面存的是模拟服务器的文本”;
这个test.txt文件将充当服务器端脚本的输出。多数情况下,服务器脚本接到请求之后,会做出相应的处理后才有所返回,这里为了方便,就直接用这个test.txt文件演示就行了,希望不会给大家带来太多的困惑。
XMLHttpRequest对象的历史比较早,几乎支持所有的浏览器,但是不同的浏览器实现XMLHttpRequest对象的方式有所不同,例如IE浏览器。为了能够保证能够跨浏览器调用,我们不得不为同样的事情写不同的代码分支了。
在IE浏览器上面,创建XMLHttpRequest对象就要使用下面的代码了:
var request = new ActiveXObject("Msxml2.XMLHTTP.3.0");
但是在其他浏览器上相对比较简单,就是基于XMLHttpRequest对象来创建对象
var request = new XMLHttpRequest();
但是,这里有一个比较麻烦的问题是:不同的IE版本中使用的XMLHTTP对象也是不完全相同的。为了兼容所有的浏览器,我们在test.js中定义这么一个函数,用来处理跨浏览器和跨版本时实现XMLHTTP对象
function getHTTPObject(){ //筛选IE浏览器 if((typeof XMLHttpRequest) == 'underfine'){ XMLHttpRequest = function(){ try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");} catch(e){} try{return new ActiveXObject("Msxml2.XMLHTTP.6.0");} catch(e){} try{return new ActiveXObject("Msxml2.XMLHTTP");} catch(e){} return false; } } //针对其他浏览器 return new XMLHttpRequest();}
getHTTPObject()方法通过对象检测技术检测了XMLHttpRequest对象,如果失败,则继续检测其他方法,最终返回false或一个新的XMLHttpRequest(或XMLHTTP)对象。
上面的getHTTPObject方法返回了一个XMLHttpRequest(或XMLHTTP)对象,现在我们定义一个函数getNewContent(),用这个对象来实现与服务器的交流。
function getNewContent(){ var request = getHTTPObject();//调用前面的函数,得到XMLHttpRequest(或XMLHTTP)对象 if(request){ request.open('GET','test.txt',true);//指定服务器上将要访问的文件 request.onreadystatechange = function(){ if(request.readyState == 4){ var para = document.createElement('p'); var txt = document.createTextNode(request.responseText); para.appendChild(txt); var testdiv = document.getElementById("testdiv"); testdiv.appendChild(para); } } request.send(null); }else{ alert("你的浏览器暂不支持XMLHttpRequest"); }}
现在可以执行getNewContent()函数,将test.txt里的内容加载到test.html里面了
window.onload = function(){ getNewcontent();}
审查test.html页面的元素,就会发现,原来的
<body> <div id="testdiv"></div></body>
变成了
<body> <div id="testdiv"> <p>这里面存的是模拟服务器的文本</p> </div></body>
这就证明了,我成功的从test.txt中把里面的内容取出来,并且在test.html里展示出来。
在getNewContent()函数里面,可能会有陌生的一些属性,我在这里顺便解释一下:
1、request.open().
open()指定服务器上将要访问的文件。一般只需指定三个参数:第一个参数指定请求的类型,GET/POST/SEND。第二个参数指定访问的文件的路径,注意该文件必须与test.html处于同一项目下。第三个参数指定是以同步的方式还是异步的方式发送和处理,true表示异步,false表示同步。
2、request.onreadystatechange.
这里的onreadystatechange是XMLHttpRequest的一个属性,它是一个事件处理函数,会在服务器给XMLHttpRequest对象送回响应的时候被触发执行。在这个函数中,可以根据服务器的具体响应做相应的处理。
3、request.readystate.
readystate属性存有服务器响应的状态信息,服务器在向XMLHttpRequest对象发回响应时,该对象有许多属性可用,浏览器回在不同的阶段更新readystate属性的值,它有5个可能的值:
<1>0表示未初始化
<2>1表示正在加载
<3>2表示加载完毕
<4>3表示正在交互
<5>4表示完成
当readystate属性的值为4的时候,我们就可以访问服务器发送回来的数据并利用它们了。
还有就是,每当readystate的值改变的时候,onreadystatechange函数就会被执行。
4、request.responseText
我们可以用responseText属性来取到由服务器返回的数据
5、request.send()
该方法向服务器发送请求
例如:
var params = "username=jack&pwd=123456";request.send(params);//向服务器发送两个值,值之间用&号隔开
在最后,我试验一下open()方法中的同步和异步的区别
在getNewContent()方法中,我添加两行代码
function getNewContent(){ var request = getHTTPObject();//调用前面的函数,得到XMLHttpRequest(或XMLHTTP)对象 if(request){ request.open('GET','test.txt',true);//指定服务器上将要访问的文件 request.onreadystatechange = function(){ if(request.readyState == 4){ alert("step 1"); var para = document.createElement('p'); var txt = document.createTextNode(request.responseText); para.appendChild(txt); var testdiv = document.getElementById("testdiv"); testdiv.appendChild(para); } } request.send(null); }else{ alert("你的浏览器暂不支持XMLHttpRequest"); } alert("step 2");}
此时open()函数中我设定第三个参数为true,即异步方式,
刷新页面, 你会发现先输出的是 step 2;
这就证明了脚本不会等待send()的响应,而是继续往下执行,因为服务器响应的速度比客户端慢。
加入你把true改成false,也就是同步的方式。那么,无论服务器的响应速度有多慢,step 2 都会等到 step 1 输出后再输出。
以上所有内容是本人在看《JavaScript DOM 编程艺术》这本书和百度后整理出来的,希望对大家的学习有所帮助。还有,感觉《JavaScript DOM 编程艺术》这本书不错,大家可以看一下。(大神勿喷)
- 关于JS中ajax的XMLHttpRequest对象的使用
- Ajax中XMLHttpRequest对象的使用
- 【AJAX】XMLHttpRequest对象的使用
- ajax的XMLHttpRequest对象
- Ajax的XMLHttpRequest对象
- ajax的xmlHttpRequest对象
- Ajax的XMLHttpRequest对象
- ajax的XMLHttpRequest()对象
- 【AJAX】——XMLHttpRequest对象的使用
- struts2中Ajax的操作实现及其核心对象XMLHttpRequest对象的使用
- AJAX的核心XMLHttpRequest对象
- Ajax的核心对象XMLHttpRequest
- AJAX的核心对象XMLHttpRequest
- XMLHttpRequest 对象--AJAX的基础
- XMLHttpRequest 对象--AJAX的基础 .
- 6.2:Ajax的XMLHttpRequest对象
- ajax的基础:XMLHttpRequest对象
- ajax XMLHttpRequest 对象的属性
- asp.net基础 笔试题(全解完整答案).
- 欢迎使用CSDN-markdown编辑器
- centos 下安装memcached
- C++继承内存对象模型
- 文章标题
- 关于JS中ajax的XMLHttpRequest对象的使用
- OC 内存管理
- 在html的css属性中,对p a span元素排版
- c++虚继承对象的内存布局
- C++ 虚函数表解析
- 递归 尾递归
- 西方的一切
- LeetCode 刷题: 左右反转一个二叉树
- Android 中获取系统时间