jQuery中关于Ajax的详解

Ajax让用户页面丰富起来, 增强用户体验. Ajax是所有Web开发的必修课. 虽然Ajax技术并不复杂, 但是实现方式还是会因为每个开发人员而有所差异.jQuery提供一系列Ajax函数来帮助我们统一这种差异, 并且让调用Ajax更加简单.jQuery提供了几个用于发送Ajax请求的函数. 其中最核心也是最复杂的是jQuery.ajax(),所有的其他Ajax函数都是它的一个简化调用.当我们想要完全控制Ajax时可以使用此结果, 否则还是使用简化方法如get, post, load等更加方便. 所以jQuery.ajax( options ) 方法放到***一个介绍. 先来介绍最简单的load方法:

1. load( url, [data], [callback] )

Returns: jQuery包装集说明

load方法能够载入远程 HTML 文件代码并插入至 DOM 中。

默认使用 GET 方式, 如果传递了data参数则使用Post方式.

传递附加参数时自动转换为 POST 方式。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector", 默认的选择器是"body>*".

讲解:

load是最简单的Ajax函数, 但是使用具有局限性:

它主要用于直接返回HTML的Ajax接口

load是一个jQuery包装集方法,需要在jQuery包装集上调用,并且会将返回的HTML加载到对象中, 即使设置了回调函数也还是会加载。

不过不可否认load接口设计巧妙并且使用简单.下面通过示例来演示Load接口的使用:

 
 
 
  1.  
  2.  
  3.  
  4.     jQuery Ajax - Load 
  5.  
  6.      
  7.  
  8.      
  9.         $(function()  
  10.         {  
  11.             $("#btnAjaxGet").click(function(event)  
  12.             {  
  13.                 //发送Get请求  
  14.                 $("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click" + "×tamp=" + (new Date()).getTime());  
  15.             });  
  16.  
  17.             $("#btnAjaxPost").click(function(event)  
  18.             {  
  19.                 //发送Post请求  
  20.                 $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost_click" });  
  21.             });  
  22.  
  23.             $("#btnAjaxCallBack").click(function(event)  
  24.             {  
  25.                 //发送Post请求, 返回后执行回调函数.  
  26.                 $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxCallBack_click" }, function(responseText, textStatus, XMLHttpRequest)  
  27.                 {  
  28.                     responseText = " Add in the CallBack Function! 
    " + responseText  
  29.                     $("#divResult").html(responseText); //或者: $(this).html(responseText);  
  30.                 });  
  31.             });  
  32.  
  33.             $("#btnAjaxFiltHtml").click(function(event)  
  34.             {  
  35.                 //发送Get请求, 从结果中过滤掉 "鞍山" 这一项  
  36.                 $("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html" + "×tamp=" + (new Date()).getTime() + " ul>li:not(:contains('鞍山'))");  
  37.             });  
  38.  
  39.         })  
  40.      
  41.  
  42.  
  43.  
  44.     使用Load执行Get请求 
  45.     使用Load执行Post请求 
  46.     使用带有回调函数的Load方法 
  47.     使用selector过滤返回的HTML内容 
  48.      
  49.     
 
  •  
  •  
  • 提示:我们要时刻注意浏览器缓存, 当使用GET方式时要添加时间戳参数 (net Date()).getTime() 来保证每次发送的URL不同, 可以避免浏览器缓存.

    提示: 当在url参数后面添加了一个空格, 比如" "的时候, 会出现"无法识别符号"的错误, 请求还是能正常发送. 但是无法加载HTML到DOM. 删除后问题解决.

    2.jQuery.get( url, [data], [callback], [type] )

    Returns: XMLHttpRequest说明:

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

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

    讲解:

    此函数发送Get请求, 参数可以直接在url中拼接, 比如:

     
     
     
    1.  

    或者通过data参数传递:

     
     
     
    1.  

    两种方式效果相同, data参数会自动添加到请求的url中如果url中的某个参数, 又通过data参数传递, 不会自动合并相同名称的参数.回调函数的签名如下:

     
     
     
    1.  

    其中data是返回的数据, testStatus表示状态码, 可能是如下值:

    "timeout","error","notmodified","success","parsererror"

    在回调函数中的this是获取options对象的引用.有关options的各种说明, 请参见:

    http://docs.jquery.com/Ajax/jQuery.ajax#options

    type参数是指data数据的类型, 可能是下面的值:

    "xml", "html", "script", "json", "jsonp", "text".

    默认为"html".

    jQuery.getJSON( url, [data], [callback] ) 方法就相当于 jQuery.get(url, [data],[callback], "json")

    3. jQuery.getJSON( url, [data], [callback] )

    Returns: XMLHttpRequest

    相当于: jQuery.get(url, [data],[callback], "json")

    说明:通过 HTTP GET 请求载入 JSON 数据。

    在jQuery 1.2 中,您可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 "myurl?callback=?"。jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。

    注意:此行以后的代码将在这个回调函数执行前执行。

    讲解:getJSON函数仅仅将get函数的type参数设置为"JSON"而已. 在回调函数中获取的数据已经是按照JSON格式解析后的对象了:

     
     
     
    1.  

    服务器端返回的字符串如下:

     
     
     
    1.  

    4.jQuery.getScript( url, [callback] )

    Returns: XMLHttpRequest

    相当于: jQuery.get(url, null, [callback], "script")

    说明:通过 HTTP GET 请求载入并执行一个 JavaScript 文件。

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

    讲解:

    以前我使用dojo类库时官方默认的文件不支持跨域***导致我放弃使用dojo(虽然在网上找到了可以跨域的版本, 但是感觉不够***). 所以我特别对这个函数的核心实现和使用做了研究.

    首先了解此函数的jQuery内部实现, 仍然使用get函数, jQuery所有的Ajax函数包括get***都是用的是jQuery.ajax(), getScript将传入值为"script"的type参数, ***在Ajax函数中对type为script的请求做了如下处理:

     
     
     
    1.  

    上面的代码动态建立了一个script语句块, 并且将其加入到head中:

     
     
     
    1.  

    当脚本加载完毕后, 再从head中删除:

     
     
     
    1.  

    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

    本文介绍如何使用jquery实现Ajax功能. 用于发送Ajax请求的相关函数如load, get, getJSON和post这些渐变Ajax方法, 对于核心的ajax 方法没有过多介绍, 主要是通过配置复杂的参数实现完全控制Ajax请求。

    当前文章:jQuery中关于Ajax的详解
    本文URL:http://www.shufengxianlan.com/qtweb/news2/459302.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    建站公司知识

    分类信息网站