XMLHttpRequest对象进行Ajax操作
XMLHttpRequest 对象的三个常用的属性:
1. onreadystatechange 属性
onreadystatechange 属性存有处理服务器响应的函数。
请求状态改变的事件触发器(readyState变化时会调用这个属性上注册的javascript函数)。
下面的代码定义一个空的函数:
xmlHttp.onreadystatechange=function(){
// 我们需要在这里写一些代码
}
2.readyState 属性
readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。
readyState有五种可能的值
0 - (Uninitialized 未初始化)对象已创建,未调用open()方法
1 - (Loading 载入)open()方法成功调用,但send()方法未调用
2 - (Loaded 载入完成)send()方法已经调用,尚未开始接受数据
3 - (Interactive 交互)正在接受数据,Http响应头信息已经接受,但尚未接收完成
4 - (Completed 完成)响应数据接受完成,可以在客户端调用了
我们要向这个 onreadystatechange 函数添加一条 if 语句,来测试我们的响应是否已完成(意味着可获得数据):
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
// 从服务器的response获得数据
}
}
3.responseText 属性
可以通过 responseText 属性来取回由服务器返回的数据,该属性代表的是从Server端返回的一个string格式的响应。
document.myForm.time.value=xmlHttp.responseText;
4.responseXML 属性
代表从Server端传回的XML格式的数据,可以直接被当作DOM对象使用。(服务器响应的XML内容对应的DOM对象)
5.status属性
这个在HTTP响应中的响应码。200代表响应成功,404表示“未找到”,500表示“服务器内部错误”等。
所以一般在status==200才进行响应数据的操作,如果不是200,那说明HTTP响应不正常,也就不用处理。
6.statusText属性
服务器返回状态的文本信息,即HTTP协议中跟在响应码后面的相应说明串。例如200 后面就会跟着OK。
XMLHttpRequest 对象的方法
1.open(String method,string url,boolean asynch,String username,String password)方法
open() 主要有三个参数需要设定。
第一个参数method定义发送请求所使用的方法,一般使用"GET","POST"。
第二个参数url表示请求的服务器的地址。
第三个参数asynch表示是否采用异步方法,true为异步,false为同步。
后边两个参数可以不指定,username和password分别表示用户名和密码,提供http认证机制需要的用户名和密码。
例如:xmlHttp.open("GET","/NewServlet",true);
2.send(content) 方法
send(content) 方法将请求送往服务器。
向服务器发出请求,如果采用异步方式,该方法会立即返回。
content可以指定为null表示不发送数据,其内容可以是DOM对象,输入流或字符串。
3.setRequestHeader(String header,String Value)
设置HTTP请求中的指定头部header的值为value,此方法需在open方法以后调用,一般在post方式中使用。
4.getAllResponseHeaders()
返回包含Http的所有响应头信息,其中相应头包括Content-length,date,uri等内容。
返回值是一个字符串,包含所有头信息,其中每个键名和键值用冒号分开,每一组键之间用CR和LF(回车加换行符)来分隔!
5.getResponseHeader(String header)
返回Http响应头中指定的键名header对应的值
6.abort()
停止当前http请求。对应的XMLHttpRequest对象会复位到未初始化的状态。
XMLHttpRequest对象进行Ajax操作的示例代码如下:
var xmlhttp; function loadAjax(url){ xmlhttp=null; if (window.XMLHttpRequest){// code for all new browsers xmlhttp=new XMLHttpRequest(); }else if (window.ActiveXObject){// code for IE5 and IE6 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } if (xmlhttp!=null){ xmlhttp.onreadystatechange=state_Change;//定义回调函数 xmlhttp.open("POST",url,true); xmlhttp.send(null); }else{ alert("你的浏览器不支持xmlhttp!"); } } function state_Change(){ if (xmlhttp.readyState==4){ if (xmlhttp.status==200){// 200 = OK var message=xmlhttp.responseText;//获取服务端响应的文本 //var domXml=xmlhttp.responseXML;//获取服务器响应的XML内容对应的DOM对象,使用的前提是,服务器端需要设置content-type为text/xml //其它代码 }else{ alert("解析响应数据出现问题"); } } }
网上找的别人写的封装好的代码,感觉不错,贴在这:
//类的构建定义,主要职责就是新建XMLHttpRequest对象 var MyXMLHttpRequest=function(){ var xmlhttprequest; if(window.XMLHttpRequest){ xmlhttprequest=new XMLHttpRequest(); if(xmlhttprequest.overrideMimeType){ xmlhttprequest.overrideMimeType("text/xml"); } }else if(window.ActiveXObject){ var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]; for(var i=0;i<activeName.length;i++){ try{ xmlhttprequest=new ActiveXObject(activeName[i]); break; }catch(e){ } } } if(xmlhttprequest == undefined || xmlhttprequest == null){ alert("XMLHttpRequest对象创建失败!!"); }else{ this.xmlhttp=xmlhttprequest; } //用户发送请求的方法 MyXMLHttpRequest.prototype.send=function(method,url,data,callback,failback){ if(this.xmlhttp!=undefined && this.xmlhttp!=null){ method=method.toUpperCase(); if(method!="GET" && method!="POST"){ alert("HTTP的请求方法必须为GET或POST!!!"); return; } if(url==null || url==undefined){ alert("HTTP的请求地址必须设置!"); return ; } var tempxmlhttp=this.xmlhttp; this.xmlhttp.onreadystatechange=function(){ if(tempxmlhttp.readyState==4){ if(temxmlhttp.status==200){ var responseText=temxmlhttp.responseText; var responseXML=temxmlhttp.reponseXML; if(callback==undefined || callback==null){ alert("没有设置处理数据正确返回的方法"); alert("返回的数据:" + responseText); }else{ callback(responseText,responseXML); } }else{ if(failback==undefined ||failback==null){ alert("没有设置处理数据返回失败的处理方法!"); alert("HTTP的响应码:" + tempxmlhttp.status + ",响应码的文本信息:" + tempxmlhttp.statusText); }else{ failback(tempxmlhttp.status,tempxmlhttp.statusText); } } } } //解决缓存的转换 if(url.indexOf("?")>=0){ url=url + "&t=" + (new Date()).valueOf(); }else{ url=url+"?+="+(new Date()).valueOf(); } //解决跨域的问题 if(url.indexOf("http://")>=0){ url.replace("?","&"); url="Proxy?url=" +url; } this.xmlhttp.open(method,url,true); //如果是POST方式,需要设置请求头 if(method=="POST"){ this.xmlhttp.setRequestHeader("Content-type","application/x-www-four-urlencoded"); } this.xmlhttp.send(data); }else{ alert("XMLHttpRequest对象创建失败,无法发送数据!"); } MyXMLHttpRequest.prototype.abort=function(){ this.xmlhttp.abort(); } } }
XMLHttpRequest对象进行Ajax操作的更多相关文章
- JavaScript使用浏览器内置XMLHttpRequest对象执行Ajax请求
所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject).XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个 ...
- XMLHttpRequest对象(Ajax)的状态码(readystate) HTTP状态代码(status)
2018-11-28 14:19:00 来自 :XMLHttpRequest对象(Ajax)的状态码(readystate) HTTP状态代码(status) XMLHttpRequest对象(Aj ...
- AJAX——XMLHttpRequest对象的使用
AJAX是web2.0即动态网页的基础,而XMLHttpRequest对象又是AJAX的核心.XMLHttpRequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据 一. ...
- AJAX原理及XMLHttpRequest对象分析
今天的主题是前端都了解的AJAX,但其中都有哪些知识点,还需要深入分析. 首先揭示AJAX的字面意思,Asynchronous Javascript And XML,通俗点就是“异步Javascrip ...
- Ajax中的XMLHttpRequest对象详解
XMLHttpRequest对象是Ajax技术的核心.在Internet Explorer 5中,XMLHttpRequest对象以ActiveX对象引入,被称之为XMLHTTP,它是一种支持异步请求 ...
- 详解AJAX核心 —— XMLHttpRequest 对象 (下)
继续上一篇的内容上一篇关于XMLHttpRequest 对象发送对服务器的请求只说到了用Get方式,没有说Post方式的.那是因为要说Post方式就需要先说另外一个东西,那就是DOM(Document ...
- 原生Ajax XMLHttpRequest对象
一.Ajax请求 - 现在常见的前后端分离项目中,一般都是服务器返回静态页面后浏览器加载完页面,运行script中的js代码,通过ajax向后端api发送异步请求获取数据,然后调用回调函数,将数据添加 ...
- ES6 用Promise对象实现的 Ajax 操作
下面是一个用Promise对象实现的 Ajax 操作的例子. const getJSON = function(url) { const promise = new Promise(function( ...
- ajax原理和XmlHttpRequest对象
Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其中最关键的一步就是从服务器获得请求数据.要清楚这 ...
随机推荐
- samba服务器源码安装(非rpm)
首先我们创建一个文档,边安装配置samba,边写教程. 从www.samba.org下载samba最新源码包,我下载的是samba-3.0.7.tar.gz,把它放在我的目录的中/root/lova/ ...
- HDU-1042 N!
首先明白这是大数问题,大数问题大多采用数组来实现.如何进位.求余等.比如1047 (Integer Inquiry): 对于1042问题 计算10000以内数的阶乘,因为10000的阶乘达到35660 ...
- 【转】cvs2svn 把CVS档案库转换为SVN档案库
转载地址:http://jackdown.blog.sohu.com/66646130.html 在linux下的操作 1).安装 下载:Python 2.0 地址:http://www.pyth ...
- 【转】MYSQL入门学习之十三:自定义函数的基本操作
转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能 www.2cto.com 函数能分 ...
- U3D UGUI学习4 - Text
1.对应NGUI的四种文字显示模式 Shrink Content 对应NGUI第一种模式 勾选Best Fit 但似乎有一个Bug,文字过多的时候会爆框.解决方法是改变Line Spacing ...
- vim中如何替换
1) 文件内全部替换: :%s#abc#123#g (如文件内有#,可用/替换,:%s/abc/123/g) --注:把abc替换成123 (或者: %s/str1/str2/g 用str ...
- hdu 1999 不可摸数 水题。
不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- EasyUI-标签(Tabs)用法
用法示例 创建tabs 1. 经由标记创建Tabs 从标记创建Tabs更容易,我们不需要写任何JavaScript代码.记住把 'easyui-tabs' 类添加到<div/>标记,每个t ...
- poj3349
http://poj.org/problem?id=3349 每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的.输入多个雪花,判断是否有形状一致的雪 ...
- Http 请求
public static string HttpGet(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Creat ...