jQuery与Ajax的应用(1)

来源:互联网 发布:淘宝店铺托管怎么收费 编辑:程序博客网 时间:2024/05/13 23:28

6.1 Ajax发展历史

AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。

该技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由Outlook Web Access小组写成。该组件原属于微软Exchange Server,并且迅速地成为了Internet Explorer 4.0的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Odd post的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。

使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息,减少网络阻塞。随着web2.0的兴起,RIA(rich interface application )概念的推出,Ajax的作用越来重要,甚至还没有找到一个更好的替代品。虽然Adobe公司的as3.0也推出,但是flash庞大的躯体,在目前拥挤的网络上还有点力不从心。(http://www.adobe.com/cn/)

6.2 Ajax的基础应用

首先,我们需要用JavaScript来创建XMLHttpRequest 对象向服务器发送一个HTTP请求, XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。 后来Mozilla﹑Netscape﹑Safari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。

对于Internet Explorer浏览器,创建XMLHttpRequest 方法如下:

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0, 5.0

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

对于Mozilla﹑Netscape﹑Safari等浏览器,创建XMLHttpRequest 方法如下(IE7和Firefox3是一样的了):xmlHttp = new XMLHttpRequest();

在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:

var xmlHttp = false;//开始初始化XMLHttpRequest对象

       if(window.XMLHttpRequest){ //Mozilla (IE7)浏览器

              xmlHttp = new XMLHttpRequest();

              if(xmlHttp.overrideMimeType) {//设置MiME类别

                     xmlHttp.overrideMimeType('text/xml');

              }

       }

       else if (window.ActiveXObject) { // IE(7以下版本)浏览器

              try {

                     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

              } catch (e) {

                     try {

                            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

                     } catch (e) {

                            xmlHttp=false;

                     }

              }

       }

在定义对象后,就要发送请求了。可以调用HTTP请求类的open()和send()方法,如下所示:

xmlHttp.open('GET', URL, true);

xmlHttp.send(null);

open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。

第二个参数是请求页面的URL。

第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。

用JavaScript来创建XMLHttpRequest 类向服务器发送一个HTTP请求后,接下来要决定当收到服务器的响应后,需要做什么。这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:

xmlHttp.onreadystatechange = function(){

// JavaScript代码段

if(xmlHttp.readyState == 4) {

       if(xmlHttp.status == 200) {

              if(xmlHttp.responseText){

            //操作服务器返回的数据

                     process(xmlHttp.responseText);

              }

       }

}

else{

   //show loading

}

};

首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。

readyState的取值如下:

0 (未初始化)、1 (正在装载)、2 (装载完毕)、3 (交互中)、4 (完成)

当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。

Ajax一次操作就算是完成了,是不是很简单?实际上Ajax的基础操作也就是这样简单,只是在不同的应用上对返回特殊处理就显得很复杂,我们透过现象看本质也就这样几行,详细的Ajax基础教程可以参考各个浏览器的官方说明。

6.3 jQuery中Ajax

在第一章提到Javascript框架或者是工具中都包含了封装上述功能的Ajax工具,就不一一介绍,下边主要讲讲JQuery中的Ajax工具包。

使用 jQuery 将使 Ajax 变得及其简单。jQuery 提供有一些函数,这些函数是根据我们日常开发的需要而封装的一些快捷操作,比如:load、ajax、get、post等等。可以使简单的工作变得更加简单,复杂的工作变得不再复杂。

jQuery的ajax工具包封装有三个层次,目的有两,第一为了符合命名规范,见明思义;第二就是为区分跨域操作,因为第三层的两个函数可以跨域操作。这样写有点牵强,先这里理解,后边讲了JSON和JSONP就明白了。

最底层就是Ajax,封装了基础Ajax一些操作;

第二层就是load、get、post,封装了jQuery的Ajax;

第三层就是getScript、getJSON,封装了get。

下边我们就一一的介绍这些函数(方法)的用法。

6.3.1. jQuery.getScript( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件。这个函数就是一个get的简写,看看源代码:

return jQuery.get(url, null, callback, "script");

 

参数名称

 

类型

 

说明

 

url

 

String

 

请求的HTML页的URL地址

 

Callback(可选)

 

Function

 

载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),不传递参数

jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。

示例代码:

加载并执行 test.js。

$.getScript("test.js");

提示:本身xmlHttp对象是不能进行异域操作的,但是浏览器head中加载script可以,这个函数就是在head中创建一个script元素,元素的src属性是url,应该真正不属于Ajax范畴。

6.3.5. jQuery.getJSON( url, [callback] ) : 通过 GET 方式请求载入并执行一个 JavaScript 文件。这个函数就是一个get的简写,看看源代码:

return jQuery.get(url, null, callback, "json");

 

参数名称

 

类型

 

说明

 

url

 

String

 

请求的HTML页的URL地址

 

Callback(可选)

 

Function

 

载入成功时回调函数(只有当Response的返回状态是success才是调用该方法),自动将请求结果(执行后的JS对象)传递给该函数

这个函数的和上边的getScript的工作原理基本一样,我们看看上边的源代码就知道,支持跨域操作,本身也支持jsonp,什么是jsonp下边的章节我们再说。

示例代码:

$.getJSON("test.js",function(json){

   $.each(json function(i,n){

      alert(n);

      alert(json.i);

})

});

6.3.2. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。

 

参数名称

 

类型

 

说明

 

url

 

String

 

请求的HTML页的URL地址

 

Data(可选)

 

Obj

 

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

 

Callback(可选)

 

Function

 

请求完成时(不需要是success的)的回调函数,自动会将请求的结果,状态,XMLHttp对象传递给该函数。

这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码(url和选择器之间用空格分开)。语法形如 "url #some > selector"。

这个方法可以很方便的动态加载一些HTML文件,例如表单。

示例代码:

$(".ajax.load").load("/index.html .p",function (responseText, textStatus, XMLHttpRequest){

              this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]

              //alert(responseText);//请求返回的内容

              //alert(textStatus);//请求状态:success,error

              //alert(XMLHttpRequest);//XMLHttpRequest对象

});

6.3.3. jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求

 

参数名称

 

类型

 

说明

 

url

 

String

 

请求的HTML页的URL地址

 

Data(可选)

 

Obj

 

发送至服务器的 key/value 数据会做为QueryString附加到请求URL中

 

Callback(可选)

 

Function

 

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

这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:

              $.get("./index.html", {app:"test",action:"test"}, function (data, textStatus){

                            //返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.

                            this; // 在这里this指向的是Ajax请求的选项配置信息,请参考下图

                            alert(data);

                            //alert(textStatus);//请求状态:success,error等等。

//当然这里捕捉不到error,因为error的时候根本不会运行该回调函数

                            //alert(this);

              });

6.3.4. jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求

 

参数名称

 

类型

 

说明

 

url

 

String

 

请求的HTML页的URL地址

 

Data(可选)

 

Obj

 

发送至服务器的 key/value 数据会做为QueryString附加到请求URL中

 

Callback(可选)

 

Function

 

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

 

Type(可选)

 

String

 

客户端请求的类型(JSON,XML,等等)

这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。示例代码:

Ajax.aspx:

Response.ContentType = "application/json";

Response.Write("{result: '" + Request["action "] + ",Hello World '}");

jQuery 代码:

$.post("Ajax.aspx", { app: "test", action: "test" },

              function (data, textStatus){

                     // data 可以是 xmlDoc, jsonObj, html, text, 等等.

                     //this; // 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的this

                     alert(data.result);

              }, "json");

Ajax.php

if(isset($_SERVER["HTTP_ACCEPT"])){

       $accept=strtolower($_SERVER["HTTP_ACCEPT"]);

       $tmp_array=explode(',',$_SERVER["HTTP_ACCEPT"]);

if(in_array('application/json',$tmp_array)){

echo json_encode($_GET);

}

}

jQuery 代码:

$.post("Ajax.php", { app: "test", action: "test" },

              function (data, textStatus){

                     // data 可以是 xmlDoc, jsonObj, html, text, 等等.

                     //this; // 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的this

                     alert(data.result);

              }, "json");

 

这里设置了请求的格式为"json",需要注意的是,如果是json类型,返回结果会自动执行eval函数,本身服务器返回只是一个字符串,但是传递进来的参数已经是eval之后的JSON对象。其他的类型,比如text、html则按照字符串的方式进行处理即可。

原创粉丝点击