jquery学习(三)-ajax

来自锋利的jquery第二版

1、Ajax的优势和不足

1.优势

A.不需要插件支持:不需要任何浏览器插件,且大多数主流浏览器支持;

B.优秀的用户体验:实现局部刷新,使得web应用能够迅速的回应用户操作;

C.提高web程序性能:在传统模式中数据交换时通过from表达实现,而数据获取靠的是全页面刷新来获取正页内容,效率非常低。而Ajax模式通过XMLHttpRequest对象向服务器提交希望提交的数据,实现按需发送和加载。

D.减轻服务器和带宽负担:Ajax工作原理相当与早用户和服务器之间加了一个中间层,使得用户操作与服务器响应异步化。它在客户端创建ajax引擎,把传统方式下的一些服务负担工作转移到客户端,使用客户端资源来处理,减轻服务器和宽带的负担。

2.不足

A.浏览器对XMLHttpRequest对象支持不足;

B.破坏浏览器的前进和后退按钮的功能;

C.对搜索引擎支持不足;

D.开发和调试工具缺乏

2、AjaxXMLHttpRequest(为方便书写以后XMLHttpRequest简写为XHR

1.属性和方法

1readyState属性

readyState属性标识了当前XHR对象所处的状态,通过该属性的访问,来判断此次的状态然后做出相应的操作。

0

未初始状态;此时已经创建了XHR对象,但是还未初始化

1

准备发送状态;此时,已经调用XHR对象的open方法,并且XHR对象已经准备将一个请求发送到服务器

2

已发送状态;此时,通过send方法把一个请求发送到服务器,但是会没有接收到响应

3

正在接收状态;此时,已经接收到http头部信息,但是消息体还没有完全接收到

4

完成响应状态;此时,已经完成XHR响应接收

 

2responseText的属性

responseText属性包含客户端接收到的HTTP响应文本内容。当readyState属性值为012时,responseText属性包含一个字符串;当readyState属性为3(正在接收)时,响应中包含客户端还未完成的响应信息;当readyState属性为4(已加载)时,该readyText才包含完整的响应信息。

(3)responseXML属性

responseXML属性用来描述被XHR对象解析后的XML文档属性。也就是说,只有当属性值为会4,并且响应头部的Content-TypeMIME类型被指定为XMLtext/xml或者application/xml)时,该属性才会 值并且解析为一个XML文档。

(4)Status属性

该属性表示HTTP请求的状态代码。仅当readyState>=3时才能访问,否则会报异常。状态代码代码状态如下表:

转自:http://hibeary.iteye.com/blog/697997

100

初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新) 

101

OK  服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)

200

 一切正常,对GET和POST请求的应答文档跟在后面。

201 

Created 服务器已经创建了文档,Location头给出了它的URL

202

Accepted  已经接受请求,但处理尚未完成

203 

Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息(HTTP 1.1新)。

204

No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

205

Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。

206

Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。 

301

Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

302

Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求 http://host/~user (缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。

304

Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

305

Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。 

400

400 - Bad Request 请求出现语法错误。 

401

Unauthorized 访问被拒绝,客户试图未经授权访问受密码保护的页面。 

403

Forbidden 请求不允许(由于服务器上文件或目录的权限设置导致资源不可用)

404

Not Found  没有发现文件、查询或URl(没有找到指定的资源)

500

Internal Server Error 服务器产生内部错误

501

Not Found  没有发现文件、查询或URl(没有找到指定的资源)

502

Bad Gateway 服务器暂时不可用,有时是为了防止发生系统过载

503

Service Unavailable 服务器过载或暂停维修

504

Gateway Timeout 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长

505

HTTP Version Not Supported服务器不支持或拒绝支请求头中指定的HTTP版本

 

(5)statusText属性

statusText属性描述了HTTP状态代码文本,readyState>=3是才可用,否则异常。

(6)onreadystatechange事件

每当readyState值发生改变时,就会触发onreadystatechange事件。一般用于触发回调处理函数。

(7)open方法

XHR对象通过调用open(method, url, async, username, passwrod)方法来进行初始化工作。

method

必填,http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

url

必填,请求的URL地址,可以为绝对地址也可以为相对地址。

async

可选,布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。

username

可选,如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

passwrod

可选,验证信息中的密码部分,如果用户名为空,则此值将被忽略。

 

(8)send方法

 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null

例如 
                    var url = "login.jsp?user=XXX&pwd=XXX";
                    xmlHttpRequest.open("GET",url,true);
                    xmlHttpRequset.send(null);

       此外,也可以使用send方法传递参数。使用send方法传递参数使用的是POST方法,需要设定Content-Type头信息,模拟HTTP POST方法发送一个表单,这样服务器才会知道如何处理上传的内容。参数的提交格式和GET方法中url的写法一样。设置头信息前必须先调用open方法。

       例如:
                   xmlHttpRequest.open("POST","login.jsp",true);
                   xmlHttpRequest.setRequestHeder("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
                   xmlHttpRequest.send("user="+username+"&pwd="+password);

(9)abort 方法

该方法可以可以暂停一个HttpRequest的请求发送或者HttpResponse的介绍,并且将XHR对象设置为初始状态。

(10)setRequestHeader方法

该方法用于设置请求头部信息。当readyState属性值为1时,可以在调用open方法后调用这个方法;否则会报异常。setRequestHeaderheadervalue)方法包含两个参数:前一个是header键名称,后一个是键值。

(11)getResponseHeader方式

此方法用于检索响应的头部值,仅当readyState>=3时才可以调用这个方法;否则, 返回空字符串。此处通过getResponseHeader方法获取所有的XHR的头部信息。

2.Ajax实例,代码如下:

var xhr=null;

If(window.ActiveXObject){  //IE5IE6是以ActiveXObject

//引入XMLHttpRequest对象的

xhr=new ActiveXObject(“Microsoft.XMLHTTP”);

}else if(window.XMLHttpRequest){ //IE5IE6外的浏览器

//XMLHttpRequestwindow的子对象

xhr=new XMLHttpRequest();    //实例化一个XMLHttpRequest对象

}

xhr.open(“GET”,”test.php”,true) //调用open方法(采用get方式、异步方法)

xhr.onreadystatechange=requestCallBack;  //设置回调函数

xhr.send(null);  //因为get方法提交,所以可以使用null作为参数调用

function requestCallBack(){    //一旦readyState值改变时就会调用该函数

if(xhr.readyState==4){    //完成响应状态,已经完成HttpResponse响应接收

if(xhr.status==200){  //请求成功

//responseText返回的信息

//xhr.responseText的值赋予idresText的元素

Document.getElementById(“resText”).innerHtml=xhr.responseText

}

}

}

3、jQuery中的Ajax

1.load方法

Load(url [,data] [,callback] )

url

string

请求HTML页面的url地址

Date(可选)

Object

发送到服务器的key/value数据

Callback(可选)

Function

请求完成时的回调函数,无论请求成功或失败

 

2.$.get$.post方法

$.get(url [,data] [,callback] [,type])

$.post(url [,data] [,callback] [,type])

url

string

请求HTML页面的url地址

Date(可选)

Object

发送到服务器的key/value数据

Callback(可选)

Function

载入成功是回调函数(只有当response的返回状态是success才调用该方法)自动将请求的结果和状态传递给该方法

Type (可选)

String

服务器返回内容格式,包括xmlhtmlscripjson_default

 

3.$.getScript方法和$.getJson方法

$.getScript(url,callback)

$.getScript(getJson,callback)

4.$.ajax方法

 

url

要求为String类型的参数,(默认为当前页地址)发送请求的地址。

type

要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

timeout

要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。

async

要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行

cache

要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false)。设置为false将不会从浏览器缓存中加载请求信息.

data

要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。

dataType

要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。

可用的类型如下:

xml:返回XML文档,可用JQuery处理。

html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。

script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。

json:返回JSON数据。

jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。

text:返回纯文本字符串。

beforeSend

要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。

      function(XMLHttpRequest, textStatus){

        this;//调用本次ajax请求时传递的options参数

      }

success

要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。

  (1)由服务器返回,并根据dataType参数进行处理后的数据。

  (2)描述状态的字符串。

     function(data, textStatus){

       //data可能是xmlDoc、jsonObj、html、text等等

       this;  //调用本次ajax请求时传递的options参数

         }

error

要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错 误信息、捕获的错误对象(可选)。

    ajax事件函数如下:

    function(XMLHttpRequest, textStatus, errorThrown){

      //通常情况下textStatus和errorThrown只有其中一个包含信息

      This;//调用本次ajax请求时传递的options参数

    }

contentType

要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。

global

要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。

ifModified

要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。

服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。

jsonp

要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如

  {jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

 

posted on 2015-12-08 22:14  菜鸟阿文  阅读(240)  评论(0编辑  收藏  举报