jquery与ajax的应用
一、ajax的优势和不足
-
ajax的优势
- 不需要插件支持
- 优秀的用户体验
- 提高web程序的性能
- 减轻服务器和带宽的负担
-
ajax的不足
- 浏览器对XMLHttpRequest对象的支持度不足
- 破坏浏览器前进、"后退"按钮的正常功能
- 对搜索引擎的支持的不足
- 开发和调试工具的缺乏
二、jquery中的ajax
最底层的方法:$.ajax()
第二层的方法:load()、$.get()、$.post() —— 使用频率最高
第三层的方法:$.getScript()、$.getJson()
- load(url [ , data] [ , callback])
一个简单的小例子:
<!-- test.html --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <div class="coment">已有评论:</div> <div class="coment"> <h6>张山:</h6> <p class="para">沙发.</p> </div> <div class="coment"> <h6>李四:</h6> <p class="para">板凳.</p> </div> <div class="coment"> <h6>王五:</h6> <p class="para">地板.</p> </div> </body> </html> <!-- index.html --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="js/jquery.1.10.2.js"></script> <script src="js/test.js"></script> <link href="css/test.css" type="text/css" rel="stylesheet"/> </head> <body> <button id="send">ajax获取</button> <div class="coment">已有评论:</div> <div id="resText"></div> </body> </html> // test.js $(function(){ $("#send").click(function(){ $("#resText").load("test.html");//载入html文档
$("#resText").load("test.html");//筛选载入的html文档 }); });
2.传递方式:
load()的传递方式根据参数data来自动指定,如果没有参数传递,则用get传递,反之则会自动采用post传递。
//无参数传递,则是GET方式
$("#resTest").load("test.php",function(){
//...
});
//无参数传递,则是POST方式
$("resText").load("test.php",{name:"niuniu",age:"22"},function(){
//...
});
3.回调参数
$("resText").load("test.html",function(responseText,textStatus,XMLHttpRequest){
//responseText:请求返回的内容
//textStatus:请求状态:success、erro、notmodified、timeout四种
//XMLHttpRequest对象
});
注意:无论ajax请求是否成功,只要当请求完成,回调函数就会被触发。
4.$.get()方法和$.post()方法
$.get()方法使用get方式来进行异步请求。
$(function(){
$("#send").click(function(){
$.get("json/test.json",{
username: $("#username").val(),
content: $("#content").val()
},回调函数);
});
});
如果服务器端接收到传递的data数据并成功返回,那么就可以通过回调函数将数据显示在页面上。
$.get()的回调函数只有两个参数
function(data,textStatus){
// data:返回的内容,可以是XML文档、JSON文件、HTML片段等等
// 请求状态:success、erro、notmodified、timeout四种
}
注意:$.get()的回调函数只有当数据成功返回(success)后才能被调用,和load()不同。
5.数据格式
服务器返回的数据格式可以有很多种,他们都可以完成相同的任务。
HTML片段
HTML实现起来只需要很少的工作量,但这种固定的数据结构并不一定在其他的web应用程序中得到重用。
XML文档
处理xml与处理html一样,也可以使用常规的dom操作。但文档体积大,难以解析。
注意:由于期待服务器端返回的数据格式是xml文档,因此需要在服务器端设置content-type类型,代码如下:
header("Content-type:text/xml;charset=utf-8");//php中
json文件
json非常简洁,容易理解,方便被重用。
ajax获取json数据的方法:
$.getScript()
1.通过$.getScript请求载入并执行一个js文件
<body> <script src="../js/lib/jquery/jquery-1.7.2.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $('#send').click(function() { $.getScript('test2.js'); }); }) </script> </head> <body> <br/> <p> <input type="button" id="send" value="加载"/> </p> <div class="comment">已有评论:</div> <div id="resText" > </div> </body> //test2.js var comments = [ { "username": "张三", "content": "沙发." }, { "username": "李四", "content": "板凳." }, { "username": "王五", "content": "地板." } ]; var html = ''; $.each( comments , function(commentIndex, comment) { html += '<div class="comment"><h6>' + comment['username'] + ':</h6><p class="para">' + comment['content'] + '</p></div>'; }) $('#resText').html(html);
2.通过$.getScript请求载入并执行一个js文件,成功载入后回调函数。比如像载入官方的颜色动画插件,载入成功后给元素绑定颜色变化的动画。
<head> <script src="../js/lib/jquery/jquery-1.7.2.min.js" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ $(function(){ $.getScript('http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js',function(){ $("<p>加载JavaScript完毕</p>").appendTo("body"); $("#go").click(function(){ $(".block").animate( { backgroundColor: 'pink' }, 1000) .animate( { backgroundColor: 'blue' }, 1000); }); }); }) //]]> </script> </head> <body> <button id="go">运行</button> <div class="block"></div> </body>
$.getJSON()
<head>
<script src="../js/lib/jquery/jquery-1.7.2.min.js" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ $(function(){ $('#send').click(function() { $.getJSON('../json/test.json', function(data) { $('#resText').empty(); var html = '';//先清空元素的内容,以便重新构造新的html $.each( data , function(commentIndex, comment) { html += '<div class="comment"><h6>' + comment['username'] + ':</h6><p class="para">' + comment['content'] + '</p></div>'; }) $('#resText').html(html); }) }) }) //]]> </script> </head> <body> <br/> <p> <input type="button" id="send" value="加载"/> </p> <div class="comment">已有评论:</div> <div id="resText" > </div> </body>
jquery提供了一个通用的遍历方法$.each(),可以用来遍历数组和对象。
$.each()方法接受两个参数,第一个是需要遍历的对象集合(JSON对象集合),第二个是用来遍历的方法,这个方法又接受两个参数,第一个是遍历的index,第二个是当前遍历的值。
一个例子:$.each()加载四张图片,但遍历的索引等于3的时候退出循环。
<head> <script src="../js/lib/jquery/jquery-1.7.2.min.js" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ $(function(){ $('#send').click(function() { $.getJSON("../json/testSrc.json", function(data){ $.each(data, function( i,item ){ $("<img class='para'/> ").attr("src", item.src ).appendTo("#resText"); if ( i == 3 ) { return false; } }); } ); }) }) //]]> </script> </head> <body> <p><input type="button" id="send" value="加载"/></p> <div id="resText" ></div> </body> //json数据 [ { "src": "test.png" } ]