0 Comments

从零开始学习jQuery之Ajax快餐(2)

发布于:2013-12-25  |   作者:广州网站建设  |   已聚集:人围观

下面是我关键的测试语句, 也用来演示如何使用getScript函数:


  1. $("#btnAjaxGetScript").click(function(event)  
  2. {  
  3.     $.getScript("../scripts/getScript.js"function(data, textStatus)  
  4.     {  
  5.         alert(data);  
  6.         alert(textStatus);  
  7.         alert(this.url);  
  8.     });  
  9. });  
  10.  
  11. $("#btnAjaxGetScriptCross").click(function(event)  
  12. {  
  13.     $.getScript("http://resource.elong.com/getScript.js"function(data, textStatus)  
  14.     {  
  15.         alert(data);  
  16.         alert(textStatus);  
  17.         alert(this.url);  
  18.     });  
  19. });  

5. jQuery.post( url, [data], [callback], [type] )

Returns: XMLHttpRequest

说明:

通过远程 HTTP POST 请求载入信息。

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

讲解:

具体用法和get相同, 只是提交方式由"GET"改为"POST".

6. jQuery.ajax( options )

Returns: XMLHttpRequest

说明:

通过 HTTP 请求加载远程数据。

jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。

$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。

$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。

注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。见 Specifying the Data Type for AJAX Requests 。

注意:如果dataType设置为"script",那么所有的远程(不在同一域名下)的POST请求都将转化为GET请求。(因为将使用DOM的script标签来加载)

jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。

讲解:

这是jQuery中Ajax的核心函数, 上面所有的发送Ajax请求的函数内部最后都会调用此函数.options参数支持很多参数, 使用这些参数可以完全控制ajax请求. 在Ajax回调函数中的this对象也是options对象.

因为平时使用最多的还是简化了的get和post函数, 所以在此不对options参数做详细讲解了. options参数文档请见:http://docs.jquery.com/Ajax/jQuery.ajax#options

三. Ajax相关函数.

jQuery提供了一些相关函数能够辅助Ajax函数。

1. jQuery.ajaxSetup( options )

无返回值

说明:

设置全局 AJAX 默认options选项。

讲解:

有时我们的希望设置页面上所有Ajax属性的默认行为.那么就可以使用此函数设置options选项, 此后所有的Ajax请求的默认options将被更改.

options是一个对象, 可以设置的属性请此连接:http://docs.jquery.com/Ajax/jQuery.ajax#toptions

比如在页面加载时, 我使用下面的代码设置Ajax的默认option选项:


  1. $.ajaxSetup({  
  2.     url: "../data/AjaxGetMethod.aspx",  
  3.     data: { "param""ziqiu.zhang" },  
  4.     global: false,  
  5.     type: "POST",  
  6.     success: function(data, textStatus) { $("#divResult").html(data); }  
  7. }); 

上面的代码设置了一个Ajax请求需要的基本数据: 请求url, 参数, 请求类型, 成功后的回调函数.

此后我们可以使用无参数的get(), post()或者ajax()方法发送ajax请求.完整的示例代码如下:


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4.     <title>jQuery Ajax - Load</title>  
  5.  
  6.     <script type="text/javascript" src="../scripts/jquery-1.3.2-vsdoc2.js"></script>  
  7.  
  8.     <script type="text/javascript">  
  9.         $(document).ready(function()  
  10.         {  
  11.             $.ajaxSetup({  
  12.                 url: "../data/AjaxGetMethod.aspx",  
  13.                 data: { "param""ziqiu.zhang" },  
  14.                 global: false,  
  15.                 type: "POST",  
  16.                 success: function(data, textStatus) { $("#divResult").html(data); }  
  17.             });  
  18.  
  19.             $("#btnAjax").click(function(event) { $.ajax(); });  
  20.             $("#btnGet").click(function(event) { $.get(); });  
  21.             $("#btnPost").click(function(event) { $.post(); });  
  22.             $("#btnGet2").click(function(event) { $.get("../data/AjaxGetMethod.aspx",{ "param""other" }); });  
  23.  
  24.         });  
  25.  
  26.     </script>  
  27.  
  28. </head>    
  29. <body>      
  30.     <button id="btnAjax">不传递参数调用ajax()方法</button><br />  
  31.     <button id="btnGet">不传递参数调用get()方法</button><br />  
  32.     <button id="btnPost">不传递参数调用post()方法</button><br />  
  33.     <button id="btnGet2">传递参数调用get()方法, 使用全局的默认回调函数</button><br />  
  34.     <br />  
  35.     <div id="divResult"></div>  
  36. </body>  
  37. </html> 

注意当使用get()或者post()方法时, 除了type参数将被重写为"GET"或者"POST"外, 其他参数只要不传递都是使用默认的全局option. 如果传递了某一个选项, 比如最后一个按钮传递了url和参数, 则本次调用会以传递的选项为准. 没有传递的选项比如回调函数还是会使用全局option设置值.
广州网站建设,网站建设,广州网页设计,广州网站设计

2.serialize( )

Returns: String

说明:

序列表表格内容为字符串,用于 Ajax 请求。

序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持.

为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的.

像这样写name属性:


  1. <input id="email" name="email" type="text" />  

讲解:

serialize()函数将要发送给服务器的form中的表单对象拼接成一个字符串. 便于我们使用Ajax发送时获取表单数据. 这和一个From按照Get方式提交时, 自动将表单对象的名/值放到url上提交差不多.

比如这样一个表单:

从零开始学习jQuery 之 AJAX快餐

生成的字符串为:single=Single¶m=Multiple¶m=Multiple3&check=check2&radio=radio1

提示:代码见 chapter6\7-serialize.htm

3.serializeArray( )Returns: Array

Returns: Array<Object>

说明:

序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。

注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。

讲解:

看说明文档让我有所失望, 使用此函数获取到的是JSON对象, 但是jQuery中没有提供将JSON对象转化为JSON字符串的方法.

在JSON官网上没有找到合适的JSON编译器, 最后选用了jquery.json这个jQuery插件:

http://code.google.com/p/jquery-json/

使用起来异常简单:


  1. var thing = {plugin: 'jquery-json', version: 1.3};  
  2. var encoded = $.toJSON(thing);              //'{"plugin": "jquery-json", "version": 1.3}'  
  3. var name = $.evalJSON(encoded).plugin;      //"jquery-json"  
  4. var version = $.evalJSON(encoded).version;  // 1.3 

使用serializeArray( ) 再配合 $.toJSON 方法, 我们可以很方便的获取表单对象的JSON, 并且转换为JSON字符串:


  1. $("#results").html( $.toJSON( $("form").serializeArray() )); 

结果为:

[{"name": "single", "value": "Single"}, {"name": "param", "value": "Multiple"}, {"name": "param", "value": "Multiple3"}, {"name": "check", "value": "check2"}, {"name": "radio", "value": "radio1"}]

四. 全局Ajax事件

在jQuery.ajaxSetup( options ) 中的options参数属性中, 有一个global属性:

global

类型:布尔值

默认值: true

说明:是否触发全局的Ajax事件.

这个属性用来设置是否触发全局的Ajax事件. 全局Ajax事件是一系列伴随Ajax请求发生的事件.主要有如下事件:

名称 说明
ajaxComplete( callback ) AJAX 请求完成时执行函数
ajaxError( callback ) AJAX 请求发生错误时执行函数
ajaxSend( callback ) AJAX 请求发送前执行函数
ajaxStart( callback ) AJAX 请求开始时执行函数
ajaxStop( callback ) AJAX 请求结束时执行函数
ajaxSuccess( callback ) AJAX 请求成功时执行函数

用一个示例讲解各个事件的触发顺序:


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4.     <title>jQuery Ajax - AjaxEvent</title>  
  5.  
  6.     <script type="text/javascript" src="../scripts/jquery-1.3.2.min.js"></script>  
  7.  
  8.     <script type="text/javascript">  
  9.         $(document).ready(function()  
  10.         {  
  11.  
  12.             $("#btnAjax").bind("click"function(event)  
  13.             {  
  14.                 $.get("../data/AjaxGetMethod.aspx");  
  15.             })  
  16.  
  17.             $("#divResult").ajaxComplete(function(evt, request, settings) { $(this).append('<div>ajaxComplete</div>'); })  
  18.             $("#divResult").ajaxError(function(evt, request, settings) { $(this).append('<div>ajaxError</div>'); })  
  19.             $("#divResult").ajaxSend(function(evt, request, settings) { $(this).append('<div>ajaxSend</div>'); })  
  20.             $("#divResult").ajaxStart(function() { $(this).append('<div>ajaxStart</div>'); })  
  21.             $("#divResult").ajaxStop(function() { $(this).append('<div>ajaxStop</div>'); })  
  22.             $("#divResult").ajaxSuccess(function(evt, request, settings) { $(this).append('<div>ajaxSuccess</div>'); })  
  23.  
  24.         });  
  25.  
  26.     </script>  
  27.  
  28. </head>  
  29. <body>      
  30.   <br /><button id="btnAjax">发送Ajax请求</button><br/>  
  31.   <div id="divResult"></div>  
  32. </body>  
  33. </html> 

结果如图:

从零开始学习jQuery 之 AJAX快餐

 

我们可以通过将默认options的global属性设置为false来取消全局Ajax事件的触发.

五. 注意事项

如果在Get请求发送的url中有两个同名参数, 比如两个param参数:

http://localhost/AjaxGetMethod.aspx?param=Multiple&param=Multiple3

使用服务器端方法获取param参数:


  1. if (!String.IsNullOrEmpty(HttpContext.Current.Request["Param"]))  
  2. {  
  3.    param = HttpContext.Current.Request["Param"];  

广州网站建设,网站建设,广州网页设计,广州网站设计

此时获取到得param是一个用","分隔多个值的字符串:

Multiple,Multiple3

六. 总结

本文介绍如何使用jquery实现Ajax功能. 用于发送Ajax请求的相关函数如load, get, getJSON和post这些渐变Ajax方法, 对于核心的ajax 方法没有过多介绍, 主要是通过配置复杂的参数实现完全控制Ajax请求. 另外讲解了ajax的辅助函数比如用于序列化表单对象为字符串的serialize()方法, 用于将表单对象序列化为JSON对象的serializeArray()方法. 这些在使用脚本获取数据实现与服务器端交互是很有用, JSON格式的数据在处理大对象编程时将我们从混乱的属性字符串中解放出来.

jQuery还提供录入全局ajax事件这一个特殊的事件, 并且可以在一个对象上设置这些事件, 在发送Ajax请求的各个生命周期上会调用这些事件, 可以通过修改默认的options对象的global属性打开或关闭全局事件.

目前本系列文章在加紧创作阶段. 所以代码和文章示例都没有来得及重新整理. 下面是本章的代码下载, 但是含有所有以前未整理的示例,请大家下载后看chapter6文件夹, 里面是本章的所有示例:下载

标签:
飞机