BLOG
Enjoy when you can, and endure when you must.
NOV 26, 2012/jQuery
jQuery的Ajax应用

一、Ajax简介:

AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它有机地包含了以下几种技术:

   Ajax(Asynchronous JavaScript + XML)的定义;

   基于web标准(standards-based presentation)XHTML+CSS的表示;

   使用 DOM(Document Object Model)进行动态显示及交互;

   使用 XML 和 XSLT 进行数据交换及相关操作;

   使用 XMLHttpRequest 进行异步数据查询、检索;

   使用 JavaScript 将所有的东西绑定在一起。

类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。

AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。[1]

与传统的web应用比较:

   传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。

   与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。


二、jQuery中的Ajax:

直接使用Ajax其实会比较麻烦,而jQuery对其进行了封装,使我们不必考虑浏览器的差异等诸多问题。下面是jQuery中常见的ajax函数:

1.load()方法:

load()方法可以通过Ajax从服务器请求数据并将其放置到指定的元素中。其语法格式如下:

   load(url,data,function(response,status,xhr));

url为所请求页面的地址,data为发送到服务器的数据(可选),function为回调函数(可选),如:

   $('#mydiv').load('external.html');

这样就可以将请求的external.html的内容放在#mydiv内。

2.get()方法:

get()方法通过GET请求动态获取数据。其语法格式如下:

   $(selector).get(url,data,success(response,status,xhr),dataType);

url为要请求的页面地址,data为发送到服务器的数据(可选),success为请求成功后的回调函数,dataType为服务器响应(返回)的数据类型,可选类型包括"xml"、"html"、"text"、"script"、"json"、"jsonp"。

3.post()方法:

post()方法通过POST请求动态获取数据。其语法格式如下:

   jQuery.post(url,data,success(data, textStatus, jqXHR),dataType);

url为要请求的页面地址,data为发送到服务器的数据(可选),success为请求成功后的回调函数,dataType为服务器响应(返回)的数据类型。

4.ajax()方法:

       ajax()方法是一种更底层的方法,其功能最为强大,以下是我的一个应用,用于异步获取电影列表:

$.ajax({
            url: '/favorites/movies/list/',    //请求页面的URL地址
            data: {page: pageNum},    //发送到服务器的数据,这里是告诉服务器所请求的页码
            dataType: "json",    //服务器响应(返回)的数据类型,这里我使用了"json"
            beforeSend: function() {    //当一个Ajax请求开始时触发beforeSend,这里主要允许你在发送请求前修改XMLHttpRequest对象的函数
                pageLoading = 1;
                leftnav_loading.fadeIn('slow');
            },
        })
        .complete(function() {    //请求完成后的回调函数(请求成功或失败时均会调用)
            pageLoading = 0;
            leftnav_loading.fadeOut('fast');
        })
        .success(function(data) {    //请求成功时调用
            //成功返回的回调函数
            ...
        })
        .error(function(jqXHR, textStatus) {    //请求失败时调用,这个方法有三个参数:XMLHttpRequest对象,错误信息,(可能)捕获的错误对象
            //错误处理回调函数
            pageLoaded = 0;
        });

       该方法还包括很多参数,以下是通过网络搜集的一个列表,更详细的可参考jQuery官方文档。

参数名
               
类型
               
描述
               
url
               
String(默认: 当前页地址) 发送请求的地址。
               
type
               
String

(默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"

。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。

timeout
               
Number设置请求超时时间(毫秒)。此设置将覆盖全局设置。
               
async
               
Boolean    

(默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false

。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。

beforeSend
               
Function

发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。

XMLHttpRequest 对象是唯一的参数。

function (XMLHttpRequest) {  

   this; // the options for this ajax request

}

cache
               
Boolean(默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。
               
complete
               
Function

请求完成后回调函数 (请求成功或失败时均调用)

。参数: XMLHttpRequest 对象,成功信息字符串。

function (XMLHttpRequest, textStatus) {  

   this; // the options for this ajax request

}

contentType
               
String

(默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。

默认值适合大多数应用场合。

data
               
Object, String

发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 。

查看 processData 选项说明以禁止此自动转换。

必须为 Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。

如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。

dataType
               
String

预期服务器返回的数据类型。

如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值:

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

"html": 返回纯文本 HTML 信息;包含 script 元素。

"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。

"json": 返回 JSON 数据 。

"jsonp": JSONP 格式。

使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

error
               
Function

(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法

。这个方法有三个参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。

function (XMLHttpRequest, textStatus, errorThrown) {  

   // 通常情况下textStatus和errorThown只有其中一个有值

   this; // the options for this ajax request

}

global
               
Boolean
               

(默认: true) 是否触发全局 AJAX 事件。

设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 。

可用于控制不同的Ajax事件

ifModified
               
Boolean
               

(默认: false) 仅在服务器数据改变时获取新数据。

使用 HTTP 包 Last-Modified 头信息判断。

processData
               
Boolean
               

(默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。

如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。

success
               
Function请求成功后回调函数。这个方法有两个参数:服务器返回数据,返回状态
               

function (data, textStatus) {          // data could be xmlDoc, jsonObj, html, text, etc...

   this; // the options for this ajax request

}


COMMENTS
LEAVE COMMNT