原文来自:http://developer.51cto.com/art/201205/335732.htm

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. <!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. <script type="text/javascript" src="../scripts/jquery-1.3.2-vsdoc2.js"></script>
  6. <script type="text/javascript">
  7. $(function()
  8. {
  9. $("#btnAjaxGet").click(function(event)
  10. {
  11. //发送Get请求
  12. $("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click" + "&timestamp=" + (new Date()).getTime());
  13. });
  14. $("#btnAjaxPost").click(function(event)
  15. {
  16. //发送Post请求
  17. $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost_click" });
  18. });
  19. $("#btnAjaxCallBack").click(function(event)
  20. {
  21. //发送Post请求, 返回后执行回调函数.
  22. $("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxCallBack_click" }, function(responseText, textStatus, XMLHttpRequest)
  23. {
  24. responseText = " Add in the CallBack Function! <br/>" + responseText
  25. $("#divResult").html(responseText); //或者: $(this).html(responseText);
  26. });
  27. });
  28. $("#btnAjaxFiltHtml").click(function(event)
  29. {
  30. //发送Get请求, 从结果中过滤掉 "鞍山" 这一项
  31. $("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html" + "&timestamp=" + (new Date()).getTime() + " ul>li:not(:contains('鞍山'))");
  32. });
  33. })
  34. </script>
  35. </head>
  36. <body>
  37. <button id="btnAjaxGet">使用Load执行Get请求</button><br />
  38. <button id="btnAjaxPost">使用Load执行Post请求</button><br />
  39. <button id="btnAjaxCallBack">使用带有回调函数的Load方法</button><br />
  40. <button id="btnAjaxFiltHtml">使用selector过滤返回的HTML内容</button>
  41. <br />
  42. <div id="divResult"></div>
  43. </body>
  44. </html>

提示:我们要时刻注意浏览器缓存, 当使用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. <script>
  2. $.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click");
  3. </script>

或者通过data参数传递:

  1. <script>
  2. $.get("../data/AjaxGetMethod.aspx", { "param": "btnAjaxGet2_click" });
  3. </script>

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

  1. <script>
  2. function (data, textStatus) {
  3. // data could be xmlDoc, jsonObj, html, text, etc...
  4. this; // the options for this ajax request
  5. }
  6. </script>

其中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. <script>
  2. $.getJSON("../data/AjaxGetCityInfo.aspx", { "resultType": "json" }, function(data, textStatus)
  3. {
  4. alert(data.length);
  5. alert(data[0].CityName);
  6. });
  7. </script>

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

  1. <script>
  2. [{""pkid"":""0997"",""ProvinceId"":""XJ"",""CityName"":""阿克苏"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false},
  3. {""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"":""Anshan"",""PostCode"":""114000"",""isHotCity"":false}]
  4. </script>

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>
  2. var head = document.getElementsByTagName("head")[0];
  3. var script = document.createElement("script");
  4. sscript.src = s.url;
  5. </script>

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

  1. <script>
  2. head.appendChild(script);
  3. </script>

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

  1. <script>
  2. // Handle Script loading
  3. if ( !jsonp ) {
  4. var done = false;
  5. // Attach handlers for all browsers
  6. scriptscript.onload = script.onreadystatechange = function(){
  7. if ( !done && (!this.readyState ||
  8. this.readyState == "loaded" || this.readyState == "complete") ) {
  9. done = true;
  10. success();
  11. complete();
  12. // Handle memory leak in IE
  13. scriptscript.onload = script.onreadystatechange = null;
  14. head.removeChild( script );
  15. }
  16. };
  17. }
  18. </script>

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的详解的更多相关文章

  1. jquery中的ajax方法详解

    定义和用法ajax() 方法通过 HTTP 请求加载远程数据.该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XML ...

  2. jQuery中的ajax使用详解

    $.ajax({   type : "get",   url : "http://www.w3school.com.cn/jquery/ajax_ajax.asp&quo ...

  3. 论如何把JS踩在脚下 —— JQuery基础及Ajax请求详解

    一.什么是JQuery? JQuery是一种JavaScript框架,是一堆大神搞出来的能够让前端程序猿敲更少代码.实现更多功能的工具(在此,跪谢各位JQuery开发大大们!!!).JQuery的使用 ...

  4. jquery中的each()方法详解

    each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSON 等等在javaScript开发过程中使用$ ...

  5. jquery中的$()详解

    一.jQuery的三种$() $号是jQuery“类”的一个别称,$()构造了一个jQuery对象.所以,“$()”可以叫做jQuery的构造函数. 1.$()可以是$(expresion),即css ...

  6. 生死相依:说说JQuery中die()、live()详解[翻译]

    一个web前端工程师,应该知道jquery的.live()函数,知道它是做什么用的,但是不知它是怎么样工作的,使用起来也是不得得心应手的,甚至也没听说过.die()(去掉bind事件).即使你能熟悉这 ...

  7. jQuery中 prop() attr()使用详解

    对于HTML元素本身就带有的固有属性,在处理时,使用prop方法.  对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 在高版本的jquery引入prop方法后,什么时候该用p ...

  8. jQuery中 $.ajax()方法详解

    $.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...

  9. $.ajax()方法详解 jquery中的ajax方法

    jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...

随机推荐

  1. Visual Studio 调试系列9 调试器提示和技巧

    系列目录     [已更新最新开发文章,点击查看详细] 01 固定数据提示 如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看. 即使在重新启动后,固定的变量也能 ...

  2. JVM学习笔记1

    1.运行时数据结构 2.堆分代 3.垃圾收集器 Parallel Scavenge收集器:新生代称为PSYoungGen,老年代称为ParOldGen,永久代称为Metaspace ParNew收集器 ...

  3. .NET Core:Token认证

    现在是WebAPI的时代,你所需要面对的不止是浏览器了,通常会使用Web, WebApp, NativeApp等多种呈现方式.其中诸如Ember,Angular,Backbone之类的前端框架类库正随 ...

  4. c# 自动给版本升级,遇9变0且前面一个版本加1

    /// <summary> /// 版本辅助类 /// 创建人: /// 创建时间:2019-11-18 13:53:55 /// </summary> public clas ...

  5. 将Prometheus alerts保存到elasticsearch

    Prometheus产生的告警通常会发送到alertmanager,当使用alertmanager时,其告警信息仅存在于alertmanager的内存中,无法持久化.故实现了小工具,用于将Promet ...

  6. SQL --------------- between 和< >

    between值 and 值 运算符用于选取介于两个值之间的数据范围内的值,常与where一块使用between运算符选择给定范围内的值.值可以是数字,文本或日期. 使用between的时候会与and ...

  7. log4j2记录日志到数据库(完美支持mysql使用DruidDataSource)

    引用 log4j-core-2.12.1.jar log4j-web-2.12.1.jar 1:配置数据源 2:调用类 3:写入

  8. 适配器模式(Adapter Pattern)--设计模式

    在生活中,想用苹果充电线给安卓的手机充电时,因为两者的接口不一样,会导致充电口无法进行匹配, 这时候,就需要适配器,将安卓的充电口转化为苹果的接口,这样就可以充电啦.已有的类与新的接口不兼容问题是很普 ...

  9. Blend 硬货 绑定

    原文:Blend 硬货 绑定 开始讲一点 硬技能 怎么用Blend实现绑定 效果 详细说一下绑定 1)default 2)OneTime 3) One Way 4)TwoWay 5) OneWayto ...

  10. 02 .NET CORE 2.2 使用OCELOT -- 路由

    继续学习.NET CORE 2.2 使用OCELOT https://www.jianshu.com/p/05ccf87a3091 https://www.jianshu.com/p/585396dc ...