jQuery学习笔记10:Ajax技术

简介:

    jQuery 库拥有完整的 Ajax 兼容套件。其中的函数和方法允许我们在不刷新浏览器的情况下从服务器加载数据。

    jQuery 采用了三层封装:最底层的封装方法为:$.ajax(),而通过这层封装了第二层有三种方法:.load()、$.get()和$.post(),最高层是$.getScript()和$.getJSON()方法。

函数 描述
jQuery.ajax() 执行异步 HTTP (Ajax) 请求。
.ajaxComplete() 当 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。
.ajaxError() 当 Ajax 请求完成且出现错误时注册要调用的处理程序。这是一个 Ajax 事件。
.ajaxSend() 在 Ajax 请求发送之前显示一条消息。
jQuery.ajaxSetup() 设置将来的 Ajax 请求的默认值。
.ajaxStart() 当首个 Ajax 请求完成开始时注册要调用的处理程序。这是一个 Ajax 事件。
.ajaxStop() 当所有 Ajax 请求完成时注册要调用的处理程序。这是一个 Ajax 事件。
.ajaxSuccess() 当 Ajax 请求成功完成时显示一条消息。
jQuery.get() 使用 HTTP GET 请求从服务器加载数据。
jQuery.getJSON() 使用 HTTP GET 请求从服务器加载 JSON 编码数据。
jQuery.getScript() 使用 HTTP GET 请求从服务器加载 JavaScript 文件,然后执行该文件。
.load() 从服务器加载数据,然后把返回到 HTML 放入匹配元素。
jQuery.param() 创建数组或对象的序列化表示,适合在 URL 查询字符串或 Ajax 请求中使用。
jQuery.post() 使用 HTTP POST 请求从服务器加载数据。
.serialize() 将表单内容序列化为字符串。
.serializeArray() 序列化表单元素,返回 JSON 数据结构数据。


1、load()方法

    load()方法通过 AJAX 请求从服务器加载数据,并把返回的数据放置到指定的元素中。.load()方法是局部方法,需要一个包含元素的jQuery对象作为前缀。

语法格式:

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

参数说明:

url:必须,请求html文件的url 地址,参数类型为String

data:可选,发送的key/value 数据,参数类型为Object

function(response,status,xhr):可选,成功或失败的回调函数,参数类型为函数Function。

response - 包含来自请求的结果数据;status - 包含请求的状态("success", "notmodified", "error", "timeout" 或 "parsererror");xhr - 包含 XMLHttpRequest 对象。

备注:XMLHttpRequest对象属于JavaScript 范畴,可以调用一些属性如下:

wKioL1OeeFLDFEKPAAEFO6-1H6E897.jpg


     xhr对象的status属性的值,如果成功返回数据则为:success,否则为:error。xhr对象的statusText属性值如下:

wKiom1OeeV_x-OKBAAGDk4DGcsU160.jpg


样例:

--让Ajax异步载入一段HTML内容,若不选择data参数,采用get方式提交,否则为post方式提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html>
<html>
<head lang= "en" >
     <meta charset= "UTF-8" >
     <title>Ajax学习</title>
     <script type= "text/javascript"  src= "jquery-1.11.1.min.js" ></script>
     <script type= "text/javascript" >
         $( function (){
             $( 'input' ).click( function (){
                 $( '#box1' ).load( 'test1.html .title' ,{username: 'qing' });
                 $( '#box2' ).load( 'test2.html' );
             });
         });
 
     </script>
</head>
<body>
     <input type= "button"  value= "Ajax加载数据"  />
     <div id= "box1" ></div>
     <hr color= "red" >
     <div id= "box2" ></div>
</body>
</html>

test1.html文件:

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head lang= "en" >
     <meta charset= "UTF-8" >
     <title></title>
</head>
<body>
     <span class= "title" >新疆大学</span>
     <span class= "url" >www.xju.edu.cn</span>
</body>
</html>

test2.html文件:

1
2
<span class= "title" >新疆大学</span>
<span class= "url" >www.xju.edu.cn</span>

输出结果:

wKioL1OdgiXDNDP9AAJXMOgp0s0639.jpg

--让Ajax异步载入服务器文件

Ajax1.htm文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns= "http://www.w3.org/1999/xhtml" >
<head>
     <title>Ajax学习</title>
     <script type= "text/javascript"  src= "jquery-1.11.1.min.js" ></script>
     <script type= "text/javascript" >
         $( function  () {
             $( 'input' ).click( function  () {
                 $( '#box1' ).load( 'http://localhost:5567/WebForm1.aspx?id=123' , { username:  'qing'  },  function  (response, status, xhr) {
                     alert( '返回的值为:'  + response +  ',状态为:'  + status +  ',状态是:'  + xhr);
                     //console.dir(xhr);
                     //console.log("xhr:", xhr);
                 });
             });
         });
     </script>
</head>
<body>
     <input type= "button"  value= "Ajax加载数据"  />
     <div id= "box1" ></div>    
</body>
</html>


WebForm1.aspx文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ Page Language= "C#"  AutoEventWireup= "true"  CodeBehind= "WebForm1.aspx.cs"  Inherits= "WebApplication1.WebForm1"  %>
<!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns= "http://www.w3.org/1999/xhtml" >
<head runat= "server" >
     <title></title>
</head>
<body>
     <form id= "form1"  runat= "server" >
     <div>
         <asp:Label ID= "lblMessage"  runat= "server"  Text= "Label" ></asp:Label>
     </div>
     </form>
</body>
</html>

WebForm1.aspx.cs文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
     public partial class WebForm1 : System.Web.UI.Page
     {
         protected void Page_Load(object sender, EventArgs e)
         {
             lblMessage.Text =  "Hello,Ajax!"  + Request[ "id" ].ToString();
         }
     }
}

输出结果如下:


wKiom1OeenDBUxldAAFIuRCbRwQ244.jpg


2、$.get()和$.post()

    $.get()和$.post()是全局方法,无须指定某个元素。对于用途而言,.load()适合做静态文件的异步获取,而对于需要传递参数到服务器页面的,$.get()和$.post()更加合适。

    $.get()方法通过远程 HTTP GET 请求载入信息。这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。  

    $.get()方法和$.post()有四个参数,前面三个参数和.load()一样,多了一个第四参数dataType,即服务器返回的内容格式:包括xml、html、script、json、jsonp 和text。第一个参数为必选参数,后面三个为可选参数。

该函数是简写的 Ajax 函数,等价于:

$.ajax({

  url: url,

  data: data,

  success: success,

  dataType: dataType

});


$.ajax({

  type: 'POST',

  url: url,

  data: data,

  success: success,

  dataType: dataType

});


--通过直接在url问号紧跟传参

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns= "http://www.w3.org/1999/xhtml" >
<head>
     <title>Ajax学习</title>
     <script type= "text/javascript"  src= "jquery-1.11.1.min.js" ></script>
     <script type= "text/javascript" >
         $( function  () {
             $( 'input' ).click( function  () {
                 $.get( 'http://localhost:5567/WebForm1.aspx?id=123&UserName=qing&pass=123456' function  (response, status, xhr) {
                     if  (status ==  "success" ) {
                         $( "#box1" ).html(response);
                     }
                 });
             });
         });
     </script>
</head>
<body>
     <input type= "button"  value= "Ajax加载数据"  />
     <div id= "box1" ></div>    
</body>
</html>

WebForm1.aspx.cs文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
     public partial class WebForm1 : System.Web.UI.Page
     {
         protected void Page_Load(object sender, EventArgs e)
         {
             lblMessage.Text =  "Hello,Ajax! id:"  + Request[ "id" ].ToString() +  ",UserName:"  + Request[ "id" ].ToString() +  ",pass:"  + Request[ "pass" ].ToString();
         }
     }
}

    注意:第四参数dataType是指定异步返回的类型。一般情况下DataType参数是智能判断,并不需要我们主动设置,如果主动设置,则会强行按照指定类型格式返回。若本身是纯文本,如果强行按照xml或者json数据格式返回的话,那么就无法获取数据。

结果:

wKioL1Oeg5HgWyzHAAFnpMqaNkY097.jpg

等效于:

--通过第二个参数data,对象形式的键值对传参

1
2
3
4
5
6
7
8
9
10
11
<script type= "text/javascript" >
         $( function  () {
             $( 'input' ).click( function  () {
                 $.get( 'http://localhost:5567/WebForm1.aspx' , {id:123, UserName:  'qing' , pass: 123456 },  function  (response, status, xhr) {
                     if  (status ==  "success" ) {
                         $( "#box1" ).html(response);
                     }
                 });
             });
         });
</script>


    $.post()方法的使用和$.get()基本上一致,基本都是背后的不同,在用户使用上体现不出。具体区别如下:

1.GET 请求是通过URL 提交的,而POST 请求则是HTTP 消息实体提交的;

2.GET 提交有大小限制(2KB),而POST 方式不受限制;

3.GET 方式会被缓存下来,可能有安全性问题,而POST 没有这个问题;


--和上面结果相同样例:

1
2
3
4
5
6
7
8
9
10
11
<script type= "text/javascript" >
         $( function  () {
             $( 'input' ).click( function  () {
                 $.post( 'http://localhost:5567/WebForm1.aspx?id=123' , {UserName:  'qing' , pass: 123456 },  function  (response, status, xhr) {
                     if  (status ==  "success" ) {
                         $( "#box1" ).html(response);
                     }
                 });
             });
         });
</script>


3、$.getScript()和$.getJSON()

    $.getScript() 方法通过 HTTP GET 请求载入并执行 JavaScript 文件。

语法格式:

$.getScript(url,success(response,status))

$.getScript(url,success(response,status))

参数说明:

url:将要请求的 URL 字符串。

success(response,status):可选。规定请求成功后执行的回调函数。额外的参数:response - 包含来自请求的结果数据;status - 包含请求的状态("success", "notmodified", "error", "timeout" 或 "parsererror")

该函数是简写的 Ajax 函数,等价于:

$.ajax({

  url: url,

  dataType: "script",

  success: success

});


$.ajax({

  url: url,

  data: data,

  success: callback,

  dataType: json

});

--样例:

1
2
3
$( 'input' ).click( function  () {
$.getScript( 'test.js' );
});
1
2
3
4
5
$( 'input' ).click( function  () {
$.getJSON( 'test.json' , function  (response, status, xhr) {
alert(response[0].url);
});
});


4、$.ajax()方法

   $.ajax()是所有ajax 方法中最底层的方法,所有其他方法都是基于$.ajax()方法的封装。这个方法只有一个参数,传递一个各个功能键值对的对象。


--样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script type= "text/javascript" >
         $( function  () {
             $( 'input' ).click( function  () {
                 $.ajax({
                     type:  'GET' ,
                     url:  'WebForm1.aspx' ,
                     data: { id:  '123' , UserName:  'qing' , pass: 123456 },
                     success:  function  (response, status, xhr) {
                         $( '#box1' ).html(response);
                     }
                 });
             });
         });
</script>
















     本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1426559,如需转载请自行联系原作者




















相关文章
|
4月前
|
JSON 缓存 前端开发
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
63 3
|
5月前
|
前端开发 JavaScript 数据处理
JQuery 拦截请求 | Ajax 请求拦截
【10月更文挑战第4天】
239 1
|
6月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
59 1
|
6月前
|
JSON 缓存 前端开发
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
个人练习前端技术使用Bootstrap、JQuery、thymeleaf
49 2
|
6月前
|
JSON JavaScript 前端开发
Jquery常用操作汇总,dom操作,ajax请求
本文汇总了jQuery的一些常用操作,包括DOM元素的选择、添加、移除,表单操作,以及如何使用jQuery发送Ajax请求,涵盖了GET、POST请求和文件上传等常见场景。
|
6月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
39 1
|
7月前
|
XML JSON 前端开发
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
AJAX是什么?原生语法格式?jQuery提供分装好的AJAX有什么区别?
51 0
|
7月前
|
前端开发 JavaScript Java
SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
关于如何在SpringBoot项目中结合JQuery和Ajax实现表单数据的传输以及单文件或多文件上传的教程。文章提供了完整的前后端示例代码,包括项目的`pom.xml`依赖配置、SpringBoot的启动类`App.java`、静态资源配置`ResourceConfig.java`、配置文件`application.yml`、前端HTML页面(单文件上传和多文件上传加表单内容)以及后端控制器`UserController.java`。文章最后展示了运行结果的截图。
446 0
SpringBoot+JQuery+Ajax实现表单数据传输和单文件或多文件的上传
|
7月前
|
JavaScript 前端开发
Ajax的使用(jquery的下载)
这篇文章是关于Ajax学习笔记的分享,包括JQuery的下载方式、Ajax的主要参数说明,以及如何在网页中使用Ajax进行异步请求的示例代码。
|
7月前
|
JavaScript 前端开发 程序员
后端程序员的前端必备-jQuery核心学习笔记
后端程序员的前端必备-jQuery核心学习笔记
80 13