JS——Ajax总结

一、XMLHttpRequest(Ajax技术的核心)

    XHR对象作用:与服务器交互(向服务器发送请求和解析服务器响应)的过程中提供流畅的接口。能够以异步的方式从服务器获取更多的信息,用户单机后,可以不必刷新页面也能获取到新数据。即用XHR对象取得新数据,然后通过DOM操作将新数据插入到页面中。Ajax技术就是无须刷新页面就可以从服务器取得数据,但不一定是XML数据。

IE5是第一款引入XHR的浏览器,它是通过一个Active对象实现的。如果要用MSXML库中的XHR对象,要编写一个函数。

其他的几款浏览器支持原生的XHR对象,在这些浏览器中创建XHR对象要像下面这样使用XMLHttpRequest()函数

var xhr = new XMLHttpRequest();

XHR的用法

调用的第一个方法:open(),三个参数。要发送的请求的类型(get/post),请求的URL,是否异步发送请求的布尔值.

xhr.open("get","example.php",false);
//调用open()方法只是启动一个请求以备发送,并不会发送真正的请求
//URL相对于执行代码的当前页面(也可以使用绝对路径)

 要发送特定的请求,调用send()方法

xhr.open("get","example.txt",false);
xhr.send(null);

send()方法接受一个参数,这个参数是作为请求主体发送的数据。

如果不需要通过请求主体发送数据,必须传入Null,当调用函数后,请求会被分派到服务器。

在收到响应后,响应的数据会自动填充XHR对象的属性。

XHR的相关属性:

1、responseText:接收响应数据。

2、responseXML:接收响应数据。如果响应的内容类型为“text/xml”“application/xml”,这个属性中将会保存包含着响应数据的xml dom文档。

XML:

<person>

  <id>1</id>

</person>

JS:

var xmldom = xhr.responseXML;//属性中保存着XML DOM文档

var persons = xmldom.getElemenstByTagName('person');

使用responseText方式,接收的便是纯文本字符串,如:“<person><id>1</id></person>";

无论内容类型是什么,响应主体的内容都会保存到responseText属性中,而对于非XML数据而言,responseXML属性值将为null。

3、status:响应的HTTP状态

4、statusText:HTTP状态的说明

接收到响应后,首先要检查status属性,以确定响应已经成功的返回。

xhr.open("get""example.php",false);
xhr.send(null);
if((xhr.status > = 200 && xhr.status < 300 )||xhr.status ==304)
{
    alert(xhr.responseText);
}
else
{
    alert("Request is unsuccessful:" + xhr.status );
}

当我们的请求是异步进行时,我们可以检测XHR对象的readyState属性,这个属性表示了当前的活动阶段。

0:未初始化。尚未调用open()方法

1:启动。已经调用open()方法,尚未调用send()方法

2:发送。已经调用send()方法,但未接收响应

3:接收。已经接收到部分响应数据

4:完成。已经接收到全部响应数据,而且可以在客户端使用。

 

 

 

 

 

Get请求

用于向服务器查询某些信息。

可以将查询字符串参数追加到url的末尾,以便将信息发送给服务器。对于XHR而言,位于传入open()方法的url末尾的查询字符串必须要经过正确的编码

查询字符串中的每个参数的名称和值都必须使用encodeURICompent()进行编码,才能放到URL的末尾

所有的名值对必须由&分割

xhr.open("get","example.php?name1=value1&name2=value2",true);

//实现

function addURLParam(url,name,value)//将字符串参数添加到url中
{
    url +=(url.indexOf("?")==-1?"?":"&");//首先检查URL是否包含?如果没有就添加一个?如果有就添加一个&
    url +=encodeURIComponent(name)+"="+encodeURIComponent(value);//将参数的值进行编码
    return url;
}
//构建请求url的实例
var url = "example.php";

url = addURLParam(url,"name","Nicholas");
url = addURLParam(url,"book","JavaScript");

xhr.open(get,url,false);

Post请求

Post请求的频率仅低于Get请求,用于向服务器发送应该被保存的数据。

Post请求把数据作为请求的主体提交,可以包含很多数据并且不限格式。

xhr.open(post,"example.php",true);

发送post请求的第二步就是向send()方法中传入数据。可以传入任何想发送到服务器的字符串,也可以传入XML DOM文档。

服务器对Post请求和提交Web表单的请求不会一视同仁,所以我们要对Post请求进行解析

我们可以用XHR来模仿表单的提交:

将Content-Type头部信息设置为application/x-www-form-urlencoded——>表单提交时的内容类型

以适当的格式创建一个字符串,若需要将页面中表单的数据序列化,再通过XHR发送到服务器,可以用serializr()函数来创建

function submitData()
{
    var xhr = createXHR;
    xhr.onreadystatschange = function()
    {
        if(xhr.readyState ==4)
        {
            if((xhr.status>=200&&xhr.status<300)||xhr.status ==304){
                alert(xhr.responseText);}
            else{
                alert("Request was unsuccessful : "+xhr.status);
            }
        }
    }
    xhr.open(post,"example.php",true);
    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    var form = document.getElementById("user-info");
    xhr.send(form);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值