jquery 中的ajax总结

jquery对ajax请求进行了封装,在jquery中$.ajax()方法属于最底层的方法,第2层是load()、$.get()、$.post()方法而第3层是$.getScript()和$.getJSON()方法,这篇文章就来看看这些方法

一、load()方法

1、load()方法能远程获取页面并插入到DOM中指定的节点。

2、load()方法结构:load(url[,data][,callback]); url请求地址、data请求参数、callback回调函数,其中data和callback是可选的!

3、demo展示

(1)、原始页面:

jsp页面

  1. <span style="font-size:14px;"><%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <!DOCTYPE html>  
  4. <html lang="zh-cn">  
  5. <head>  
  6. <meta charset="utf-8">  
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge">  
  8. <meta name="viewport" content="width=device-width, initial-scale=1">  
  9. <title>首页</title>  
  10. <!-- zui -->  
  11. <link href="../../../dist/css/zui.min.css" rel="stylesheet">  
  12. <link href="../../../dist/lib/datetimepicker/datetimepicker.css"  
  13.     rel="stylesheet">  
  14. </head>  
  15. <body style="background-color: #fcfcfc;">  
  16.     <div class="container">  
  17.         <div class="panel">  
  18.             <div class="panel-heading" style="text-align: center;">首页</div>  
  19.             <div class="panel-body">  
  20.                 <div class="form-horizontal">  
  21.                     <div style="margin-bottom: 1%;">  
  22.                         <a href="stocklist.do" target="blank"> <i  
  23.                             class="icon icon-link"></i>库存查询  
  24.                         </a>  
  25.                     </div>  
  26.                     <div style="margin-bottom: 1%;">  
  27.                         <a href="priceStock.do" target="blank"> <i  
  28.                             class="icon icon-link"></i>库存价格查询  
  29.                         </a>  
  30.                     </div>  
  31.                 </div>  
  32.             </div>  
  33.         </div>  
  34.     </div>  
  35.     <!--test begin-->  
  36.     <div>  
  37.         <input type="button" id="testload" name="testload" value="load" /> <input  
  38.             type="button" id="testget" name="testget" value="get" /> <input  
  39.             type="button" id="testpost" name="testpost" value="post" /> <input  
  40.             type="button" id="testscript" name="testscript" value="script" /> <input  
  41.             type="button" id="testjson" name="testjson" value="json" />  
  42.     </div>  
  43.     <!-- 展示 -->  
  44.     <div id="showinfo">  
  45.         <ul>  
  46.             <li id="id1"></li>  
  47.         </ul>  
  48.     </div>  
  49.   
  50.     <!--test  end  -->  
  51. </body>  
  52. <!-- jQuery (ZUI中的Javascript组件依赖于jQuery) -->  
  53. <script type="text/javascript" src="../../../js/jquery-2.1.3.min.js"></script>  
  54. <!-- ZUI Javascript组件 -->  
  55. <script src="../../../dist/js/zui.min.js"></script>  
  56. <script src="../../../dist/lib/datetimepicker/datetimepicker.js"></script>  
  57. <script src="../../../js/jd/index.js"></script>  
  58. </html></span>  

js代码:

  1. $(function() {  
  2.     $("#testload").on("click", function() {  
  3.         myobj.fload();  
  4.     });  
  5. });  
  6. var myobj = {  
  7.     fload : function() {  
  8.         var obj = {};  
  9.         $("#showinfo").load("index.do", {  
  10.             name : "zhangsan",  
  11.             age : "21"  
  12.         }, function(responseText, textStatus, XMLHttpRequest) {  
  13.             $("#id1").html("status:" + textStatus);  
  14.             console.log(restext);  
  15.         });  
  16.     },  
  17.     fget : function() {  
  18.   
  19.     },  
  20.     fpost : function() {  
  21.   
  22.     },  
  23.     fscript : function() {  
  24.   
  25.     },  
  26.     fjson : function() {  
  27.   
  28.     }  
  29. }  


后台java代码即controller层:

  1. /** 
  2.   * 首页 
  3.   * @param request 
  4.   * @param response 
  5.   * @return 
  6.   */  
  7. @RequestMapping(value="index")  
  8. public String test(HttpServletRequest request, HttpServletResponse response) {  
  9.     return "jd/index";  
  10. }  

(2)、页面展示:

访问的页面

当我们单击load按钮时做的事情就是调用load方法发送请求到后台,然后把index.jsp这个整个的页面返回到laod方法,再将返回的这个页面加载到当前的index页面指定的div下,效果如下:

返回加载后的页面

还发现没,下面多了个status:success 这是在load方法的回调函数中进行的操作:

js代码如下:

  1. fload : function() {  
  2.         var obj = {};  
  3.         $("#showinfo").load("index.do", {  
  4.             name : "zhangsan",  
  5.             age : "21"  
  6.         }, function(responseText, textStatus, XMLHttpRequest) {  
  7.             $("#id1").html("status:" + textStatus);  
  8.             console.log(restext);  
  9.         });  
  10.     },  

其中的function就是load方法的回调方法,其中有三个参数即load方法请求返回的内容、请求状态和XMLHttpRequest对象!


发现没浏览器页面console控制台输出的就是整个index页面,因为我们在load方法的回调函数中打印了返回的信息!

ok这样就测试了一个load方法的demo,下面来看看,url中添加过滤条件的情况:

js代码:

  1. fload : function() {  
  2.         var obj = {};  
  3.         $("#showinfo").load("index.do .container", {  
  4.             name : "zhangsan",  
  5.             age : "21"  
  6.         }, function(responseText, textStatus, XMLHttpRequest) {  
  7.             $("#id1").html("status:" + textStatus);  
  8.             console.log(responseText);  
  9.         });  
  10.     }  


在load方法的请求地址中添加了过滤条件即class="container"添加这个过滤条件就是只把这个页面中class=“container”的部分加载到页面中。

注意:url和过滤条件之间是有空格的!

load方法小总结:

1、请求方法load()中的三个参数,只有url请求地址是必填的,其他两个都可以选填

2、第二个参数即请求参数,参数个是{key:value,key2:value}

3、回调函数,这个函数的的三个参数值请求返回的内容,请求状态,以及XMLHttpRequest对象,这个回调函数是在请求完成后触发的,和请求成功失败没关系!

4、load()方法是将一个页面的内容添加到指定的DOM的元素下,所以在js中调用load()方法时应该是$("#id").load(url)DOM中的某个节点元素而不是$.load(url);

5、load()方法传递方式是按照data参数来决定的,如果没有参数传递则使用get方式的如果有参数传递则是使用post方式

二、get()方法

1、$.get()方法使用get方式进行异步请求。

2、$.get()方法结构:$.get(url[,data][,callback][,type]);url为请求地址、data请求参数可选、callback请求成功回调函数可选、type参数返回格式可选!

3、demo

  1. fget : function() {  
  2.         var obj={};  
  3.         obj.param="hello gettest!";  
  4.         //get和load不同,只有在请求成功的情况下才会触发回调函数,回调函数的参数只有两个即请求返回的内容和请求状态,  
  5.           $.get("gettest.do",obj,function(responseText,textStatus){  
  6.               alert("responseText:"+responseText +" textStatus:"+textStatus);  
  7.           },"text");  
  8.     }  

4、java代码控制层

  1. @RequestMapping(value="gettest")  
  2.     public void loadtest(HttpServletRequest request, HttpServletResponse response){  
  3.         String param= request.getParameter("param");  
  4.         System.out.println("loadtest:"+param);  
  5.         setServletResponse(response);  
  6.         out.print("load"+param);  
  7.     }  

5、运行结果:

这是一个完整的$.get()demo,

$.get()总结:

1、get请求的回调函数只有两个参数即请求返回的信息和请求状态!

2、只有请求成功后才会调用回调函数而不像load方法不管成功还是失败都会调用回调函数!

3、Type参数,定义了请求返回的数据格式,按照自己需求进行定义支持如下几种格式:xml、html、script、json、text!

三、$.post()方法

1、$.post()和$.get()两种方法除了传递参数的方式不同即一个是get方法一个是post方式其他的都一样!

2、js 的demo:

  1. fpost : function() {  
  2.         var obj={};  
  3.         obj.param="hello gettest!";  
  4.         $.post("posttest.do",obj,function(responseText,textStatus){  
  5.             alert("responseText:"+responseText +" textStatus:"+textStatus);  
  6.         },"text");  
  7.     }  


3、java代码控制层:

  1. <span style="font-size:14px;">@RequestMapping(value="posttest")  
  2.     public void loadtest(HttpServletRequest request, HttpServletResponse response){  
  3.         String param= request.getParameter("param");  
  4.         System.out.println("loadtest:"+param);  
  5.         setServletResponse(response);  
  6.         out.print("load"+param);  
  7.     }</span>  

四、$.getScript()
不好意思 这个自己demo访问不了!!!

五、 $.getJSON()方法

1、$.getJSON()方法格式:$.getJSON(url,callback); 即请求地址和回调函数,回调函数中处理返回的结果!

2、$.getJSON()方法demo:

(1)、js代码

  1. fjson : function() {  
  2.        $.getJSON("jsontest.do",function(data){  
  3.            //返回json格式的数据  
  4.            var  jsonObj = data;  
  5.            var name = jsonObj.name;  
  6.            var age = jsonObj.age;  
  7.            console.log("name:"+name +" age:"+age);  
  8.        });  
  9.     }  

(2)、java代码控制层

  1. @RequestMapping(value="jsontest")  
  2.     public void loadtest(HttpServletRequest request, HttpServletResponse response){  
  3.         setServletResponse(response);  
  4.         JSONObject json = new JSONObject();  
  5.         json.put("name", "whd");  
  6.         json.put("age", 12);  
  7.         out.print(json.toString());  
  8.     }  


(3)、运行结果:


ok 到此jquery的各种ajax请求方法都ok了,当然还有$.ajax()方法,我们用的也是比较多的,这里就不说了!

六、$.each()函数

1、$.each()函数不同于jquery对象的each()方法,他是一个全局函数,不操作jquery对象,而是以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。回调函数拥有两个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容!

2、demo展示:

  1. getaddress1:function(id){  
  2.             $.ajax({  
  3.                 type:'post',  
  4.                 url:'jdaddress.do',  
  5.                 dataType:'json',  
  6.                 async:false,  
  7.                 success:function(data){  
  8.                 var json=data;  
  9.                 var text='<option value=0>省份</option>';  
  10.                 $.each(json, function(i, val) {    
  11.                     text =text+'<option value='+val+'>'+i+'</option>';  
  12.                 });   
  13.                 console.log("text:"+text);  
  14.                 $("#province").empty();  
  15.                 $("#province").append(text);  
  16.                 }  
  17.             });  
  18.         }  

返回数据即data即json的格式为:

  1. {  
  2. "北京": 1,   
  3. "上海":2,  
  4. "黑龙江": 10  
  5. }  
  1. 返回的数据也就是一个json对象,再来看$.each(json,function(i,val){ })在json为对象时i就是json的key而val就是json的key对应的value值。  
  2. 如果json是个数组则i就是数组中的索引而val就是数组中索引对应的值即有可能就是一个json对象!  

七、五种方法的js

  1. $(function() {  
  2.     //方法触发调用  
  3.     $("#testload").on("click", function() {  
  4.         myobj.fload();  
  5.     });  
  6.     $("#testget").on("click", function() {  
  7.         myobj.fget();  
  8.     });  
  9.     $("#testpost").on("click", function() {  
  10.         myobj.fpost();  
  11.     });  
  12.     $("#testscript").on("click", function() {  
  13.         myobj.fscript();  
  14.     });  
  15.     $("#testjson").on("click", function() {  
  16.         myobj.fjson();  
  17.     });  
  18.   
  19. });  
  20.   
  21. var myobj = {  
  22.     // load方法  
  23.     fload : function() {  
  24.         var obj = {};  
  25.         $("#showinfo").load("index.do .container", {  
  26.             name : "zhangsan",  
  27.             age : "21"  
  28.         }, function(responseText, textStatus, XMLHttpRequest) {  
  29.             $("#id1").html("status:" + textStatus);  
  30.             console.log(responseText);  
  31.         });  
  32.     },  
  33.     // get方法  
  34.     fget : function() {  
  35.         var obj = {};  
  36.         obj.param = "hello gettest!";  
  37.         // get和load不同,只有在请求成功的情况下才会触发回调函数,回调函数的参数只有两个即请求返回的内容和请求状态,  
  38.         $.get("gettest.do", obj,  
  39.                 function(responseText, textStatus) {  
  40.                     alert("responseText:" + responseText + " textStatus:"  
  41.                             + textStatus);  
  42.                 }, "text");  
  43.     },  
  44.     // post方法  
  45.     fpost : function() {  
  46.         var obj = {};  
  47.         obj.param = "hello gettest!";  
  48.         $.post("posttest.do", obj,  
  49.                 function(responseText, textStatus) {  
  50.                     alert("responseText:" + responseText + " textStatus:"  
  51.                             + textStatus);  
  52.                 }, "text");  
  53.     },  
  54.     // script方法  
  55.     fscript : function() {  
  56.         $  
  57.                 .getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js");  
  58.     },  
  59.     // json方法  
  60.     fjson : function() {  
  61.         $.getJSON("jsontest.do", function(data) {  
  62.             // 返回json格式的数据  
  63.             var jsonObj = data;  
  64.             var name = jsonObj.name;  
  65.             var age = jsonObj.age;  
  66.             console.log("name:" + name + " age:" + age);  
  67.         });  
  68.     }  
  69. }  

这里只给出js不给java是因为他们和我们平时些的$.ajax()方法的处理是一样的,接收请求参数,后台处理数据,返回数据到请求方法,回调函数中处理返回的信息!

猜你喜欢

转载自my.oschina.net/u/3470396/blog/1635634