您的位置:首页 > 理论基础 > 计算机网络

ajax核心技术1---XMLHttpRequset对象的使用

2017-07-02 12:15 465 查看
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML)。是指一种创建交互式网页应用的网页开发技术。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。ajax是一种用于创建高速动态网页的技术。

通过在后台与server进行少量数据交换,AJAX 能够使网页实现异步更新。这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行更新。从今天開始nie。小编開始和小伙伴们一起学习ajax的相关知识,这篇博文。小编主要简单的和大家介绍介绍XMLHttpRequset对象的使用,首先我们来看一下这个对象的属性还有方法。首先,我们来看属性,例如以下表所看到的:



接着,我们来看方法。例如以下表所看到的:



XMLHttpRequest的缩写为XHR。中文名字叫做可扩展超文本传输请求,Xml可扩展标记语言。Http超文本传输协议,Request请求。

XMLHttpRequest对象能够在不向server提交整个页面的情况下,实现局部更新网页。当页面所有载入完毕后。client通过该对象向server请求数据,server端接受数据并处理后。向client反馈数据。

XMLHttpRequest 对象提供了对 HTTP 协议的全然的訪问,包含做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 能够同步或异步返回 Web server的响应。而且能以文本或者一个 DOM 文档形式返回内容。虽然名为 XMLHttpRequest,它并不限于和 XML 文档一起使用:它能够接收不论什么形式的文本文档。XMLHttpRequest 对象是名为 AJAX 的 Web 应用程序架构的一项关键功能。上面的两张图片对XHR有了一定的了解。接下来,就到了实战的时候了,我们这里用经典的五步法来介绍一下:

第一步、创建XHR对象。代码例如以下所看到的:

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;
}


第二步、注冊回调方法:

<span style="font-size:18px;">xmlhttp.onreadystatechange=callback;
</span>
第三步、设置和server交互的对应參数:

<span style="font-size:18px;"> xmlhttp.open("GET","ajax?name=" +userName,true);
</span>
第四步、设置向server端发送的数据,启动和server端的交互:
<span style="font-size:18px;">  xmlhttp.send(null);</span>
第五步、推断和server端的交互是否完毕。还要推断server端是否返回正确的数据:

<span style="font-size:18px;">//根基实际条件写callback的功能代码
function callback(){
if(xmlhttp.readState==4){
//表示server的对应代码是200;正确返回了数据
if(xmlhttp.status==200){
//纯文本数据的接受方法
var message=xmlhttp.responseText;
//使用的前提是。server端须要设置content-type为text/xml
//var domXml=xmlhttp.responseXML;
//其他代码
}
}
}
</span>
通过这五步XMLHttpRequest基本上就创建好,能够正常使用了,如上面所看到的的,代码量有点多。导致每次创建的时候,我们都须要写如此多的代码,所以,我们能够将同样的部分抽象出来。使之成为一个独立的类,以下的是小编从网上搜索的一个,供小伙伴们參考一下`(*∩_∩*)′。不用客气!代码例如以下所看到的:

//类的构建定义,主要职责就是新建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();
}
}
}
小编寄语:这篇博客,小编主要简单的介绍了一下XHR对象的一些方法和属性。还有经典的五步法。对于这些基础的知识。还须要小伙伴们在日常的学习中,多多动手实践。实习第二个月,精彩未完待续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: