《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(上)
2010-12-06 02:06
459 查看
《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(上)
一、jQuery中的Ajax
1 load()方法 load(url[,data][,callback])
url: string类型,请求html页面的url地址
data:object类型,发送至服务器的key/value数据
callback:function类型,请求完成时的回调函数,无论请求成功或失败
1.1 载入html文档
首先构建一个被load()加载并追加到页面中的html文件,取名为test.html,如下:
触发ajax页面和jQuery代码如下:
执行如上代码后,test.html的内容被加载进#resText中。
1.2 筛选载入的html文档
1.3 传递方式
load()方法的传递方式根据参数data自动指定,如果没有参数传递,则采用GET方式传递;反之,则会自动转换为POST方式。
1.4 回调参数
加载完成(无论请求成败)后继续的操作。提供3个参数:请求返回的内容、请求状态、XMLHttpRequest对象。
2 $.get()方法和$.post()方法
2.1 $.get()
$.get(url[,data][,callback][,type])
$.get()方法的回调函数注释:
$.get()方法的回调函数只有两个参数data和textStatus,且回调函数只有当数据成功返回(success)后才被调用,和load()方法不同
例(P182)
2.1.1 使用参数
2.1.2 数据格式
HTML片段
XML文档(需要在服务端设置Content-Type类型:header("Content-Type:text/xml; charset=utf-8");//php)
JSON文件
2.2 $.post()
与$.get()的区别
get请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的实体内容发送给web服务器。
get方式对传输的数据有大小限制(<=2kb),而使用POST方式传递的数据量不受限制
get方式请求的数据会被浏览器缓存起来,引起安全性问题
get方式和post方式传递的数据在服务器端的获取也不相同。php中,get方式的数据可以用$_GET[]获取,而post方式可以用$_POST[]获取。两种方式都可以用$_REQUEST[]来获取。
由于post和get方式提交的所有数据都可以通过$_REQUEST[]来获取,因此只需要改变jQuery函数,就可以在get请求和post请求之间切换。(P186)
另外,当load()方法带有参数传递时,会使用post方式发送请求。因此也可以使用load()方法来完成同样的功能。如:
3 $.getScript()方法和$.getJson()方法(P187)
3.1 $.getScript() 动态加载js文件(可以加回调函数)
3.2 $.getJSON() 动态加载json文件,加载后的数据可通过回调函数处理
遍历数据(P189):
引申:JSONP(P190)
JSONP允许在服务器端集成Script tags返回至客户端,通过JavaScript Callback的形式实现跨域访问。(略)
4 $.ajax()方法(P191)
$.ajax(options) 该方法只有1个参数
常用参数表(参数详细说明见原书P192)
$.ajax()方法是jQuery最底层的Ajax实现,可以用来代替前面所有的方法
如使用$.ajax()方法代替$.getScript()方法:
再如使用$.ajax()方法代替$.getJSON()方法:
一、jQuery中的Ajax
1 load()方法 load(url[,data][,callback])
url: string类型,请求html页面的url地址
data:object类型,发送至服务器的key/value数据
callback:function类型,请求完成时的回调函数,无论请求成功或失败
1.1 载入html文档
首先构建一个被load()加载并追加到页面中的html文件,取名为test.html,如下:
<div class="comment"> <h6>项目1:</h6> <p class="para">值1</p> </div> <div class="comment"> <h6>项目2:</h6> <p class="para">值2</p> </div> <div class="comment"> <h6>项目3:</h6> <p class="para">值3</p> </div>
触发ajax页面和jQuery代码如下:
<input type="button" id="send" value="ajax获取" /> <div class="comment">所有项目:</div> <div id="resText"></div> <script> $(function(){ $("#send").click(function(){ $("#resText").load("test.html"); }); }); </script>
执行如上代码后,test.html的内容被加载进#resText中。
1.2 筛选载入的html文档
<!--在载入的文件名后跟选择器-->$("#resText").load("test.html .para");
1.3 传递方式
load()方法的传递方式根据参数data自动指定,如果没有参数传递,则采用GET方式传递;反之,则会自动转换为POST方式。
$("#resText").load("test.php",{name:"rain",age:"22"},function(){ //... });
1.4 回调参数
加载完成(无论请求成败)后继续的操作。提供3个参数:请求返回的内容、请求状态、XMLHttpRequest对象。
$("#resText").load("test.html",function(responseText,textStatus,XMLHttpRequest){ // responseText: 请求返回的内容 // textStatus: 请求状态:success、error、notmodified、timeout 4种 // XMLHttpRequest: XMLHttpRequest对象 });
2 $.get()方法和$.post()方法
2.1 $.get()
$.get(url[,data][,callback][,type])
参数名称 | 类型 | 说明 |
url | String | 请求的HTML页的URL地址 |
data(可选) | Object | 发送至服务器的key/value数据回作为QueryString附加到请求URL中 |
callback(可选) | Function | 载入成功时回调函数(只有当Response的返回状态是success才调用该方法)自动将请求结果和状态传递给该方法 |
type(可选) | String | 服务器端返回内容的格式,包括xml、html、script、json、text和_default |
$.get()方法的回调函数只有两个参数data和textStatus,且回调函数只有当数据成功返回(success)后才被调用,和load()方法不同
function(data,textStatus){ //data:返回的内容,可以是XML文档,JSON文件,HTML片段等等 //textStatus:请求状态:success、error、notmodified、timeout4种 }
例(P182)
<form id="form1" action="#"> <p>评论</p> <p>姓名<input type="text" name="username" id="username" /></p> <p>内容<textarea name="content" id="content"></textarea></p> <p><input type="button" id="send" value="提交" /></p> </form> <div class="comment">已有评论</div> <div id="resText"></div>
2.1.1 使用参数
$("#send").click(function(){ $.get("get1.php",{ //确定请求页面的URL地址 username:$("#username").val(), content:$("#content").val() //将姓名和内容的值作为data参数传递给后台 },回调函数); });
2.1.2 数据格式
HTML片段
$(function(){ $("#send").click(function(){ $.get("get1.php",{ username:$("#username").val(), content:$("#content").val() },function(data,textStatus){ $("#resText").html(data); //将返回的数据添加到页面上 }); }); });
XML文档(需要在服务端设置Content-Type类型:header("Content-Type:text/xml; charset=utf-8");//php)
$(function(){ $("#send").click(function(){ $.get("get2.php",{ username:$("#username").val(), content:$("#content").val() },function(data,textStatus){ var username = $(data).find("comment").attr("username"); var content = $(data).find("comment content").text(); var txtHtml = "<div class='comment'><h6>" + username + ":</h6><p class='para'>" + content + "</p></div>"; $("#resText").html(txtHtml); //将返回的数据添加到页面上 }); }); });
JSON文件
$(function(){ $("#send").click(function(){ $.get("get3.php",{ username:$("#username").val(), content:$("#content").val() },function(data,textStatus){ var username = data.username; var content = data.content; var txtHtml = "<div class='comment'><h6>" + username + "</h6><p class='para'>" + content + "</p></div>"; $("#resText").html(txtHtml); //将返回的数据添加到页面上 },"json"); //设置$.get()方法的第四个参数(type)为"json"来代表期待服务器端返回的数据格式 }); });
2.2 $.post()
与$.get()的区别
get请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的实体内容发送给web服务器。
get方式对传输的数据有大小限制(<=2kb),而使用POST方式传递的数据量不受限制
get方式请求的数据会被浏览器缓存起来,引起安全性问题
get方式和post方式传递的数据在服务器端的获取也不相同。php中,get方式的数据可以用$_GET[]获取,而post方式可以用$_POST[]获取。两种方式都可以用$_REQUEST[]来获取。
由于post和get方式提交的所有数据都可以通过$_REQUEST[]来获取,因此只需要改变jQuery函数,就可以在get请求和post请求之间切换。(P186)
另外,当load()方法带有参数传递时,会使用post方式发送请求。因此也可以使用load()方法来完成同样的功能。如:
$(function(){ $("#send").click(function(){ $("#resText").load("post1.php",{ username:$("username").val(), content:$("#content").val() }); }); });
3 $.getScript()方法和$.getJson()方法(P187)
3.1 $.getScript() 动态加载js文件(可以加回调函数)
$(function(){ $("#send").click(function(){ $.getScript("test.js"); }); });
3.2 $.getJSON() 动态加载json文件,加载后的数据可通过回调函数处理
$(function(){ $("#send").click(function(){ $.getJSON("test.json",function(data){ //data:返回的数据 }); }); });
遍历数据(P189):
$(function(){ $("#send").click(function(){ $.getJSON("test.json",function(data){ $("#resText").empty(); //返回数据成功后,首先清空id为resText的元素的内容,以便重新构造新的html var html = ""; $.each(data,function(commentIndex,comment){ //$.each()函数遍历对象和数组//(以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。//回调函数拥有2个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容) html += "<div class='comment'><h6>" + comment['username'] + ":</h6><p class='para'>" + comment['content'] + "</p></div>"; //将遍历出来的内容构建成html代码拼接起来 }); $("#resText").html(html); //将构建好的html添加到id为resText的元素中 }); }); });
引申:JSONP(P190)
JSONP允许在服务器端集成Script tags返回至客户端,通过JavaScript Callback的形式实现跨域访问。(略)
4 $.ajax()方法(P191)
$.ajax(options) 该方法只有1个参数
常用参数表(参数详细说明见原书P192)
参数名称 | 类型 | 说明 |
url | String | 发送请求的地址,默认为当前页地址 |
type | String | 请求方式(POST或GET,默认为GET) |
timeout | Number | 设置请求超时时间 |
data | Object或String | 发送到服务器的数据 |
dataType | String | 预期服务器返回的数据类型,可用类型有:xml、html、script、json、jsonp、text |
beforeSend | Function | 发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头 |
complete | Function | 请求完成后调用的回调函数(请求成功或失败时均调用) |
success | Function | 请求成功后调用的回调函数 |
error | Function | 请求失败时被调用的函数 |
global | Boolean | 默认为true。表示是否触发全局Ajax事件 |
如使用$.ajax()方法代替$.getScript()方法:
$(function(){ $("#send").click(function(){ $.ajax({ type:"GET", url:"test.js", dataType:"script" }); }); });
再如使用$.ajax()方法代替$.getJSON()方法:
$(function(){ $("#send").click(function(){ $.ajax({ type:"GET", url:"test.json", dataType:"json", success:function(data){ $("#resText").empty(); var html = ""; $.each(data,function(commentIndex,comment){ html += "<div class='comment'><h6>" + comment["username"] + ":</h6><p class='para'>" + comment["comment"] + "</p></div>"; }); $("#resText").html(html); } }); }); });
相关文章推荐
- 《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(下)
- 《锋利的jQuery》要点归纳(四)jQuery对表单、表格的操作及更多应用(下:其他应用)
- 《锋利的jQuery》要点归纳(四)jQuery对表单、表格的操作及更多应用(中:表格应用)
- 《锋利的jQuery》要点归纳(四)jQuery对表单、表格的操作及更多应用(上:表单应用)
- 《锋利的jQuery》七、jQuery和Ajax的应用
- 《锋利的jQuery》读书笔记 第6章 jQuery与Ajax的应用
- 《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(下:动画篇)
- 《锋利的jQuery》要点归纳(一) jQuery选择器
- 《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(上:事件篇)
- 《锋利的jQuery》要点归纳(二) jQuery中的DOM操作(上)
- 《锋利的jQuery》第六章、 jQuery与Ajax应用
- 《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(上:事件篇)
- 《锋利的jQuery》要点归纳(二) jQuery中的DOM操作(下)
- 《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(下:动画篇)
- jquery Ajaxupload应用
- 《锋利的jQuery》之jQuery与Ajax
- jquery与ajax应用
- jquery与ajax的应用
- 《jquery权威指南》读书笔记之第六章--Ajax在jquery中的应用
- jquery+ajax实现排名小应用