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页面
<span style="font-size:14px;"><%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>首页</title> <!-- zui --> <link href="../../../dist/css/zui.min.css" rel="stylesheet"> <link href="../../../dist/lib/datetimepicker/datetimepicker.css" rel="stylesheet"> </head> <body style=""> <div class="container"> <div class="panel"> <div class="panel-heading" style="text-align: center;">首页</div> <div class="panel-body"> <div class="form-horizontal"> <div style="margin-bottom: 1%;"> <a href="stocklist.do" target="blank"> <i class="icon icon-link"></i>库存查询 </a> </div> <div style="margin-bottom: 1%;"> <a href="priceStock.do" target="blank"> <i class="icon icon-link"></i>库存价格查询 </a> </div> </div> </div> </div> </div> <!--test begin--> <div> <input type="button" id="testload" name="testload" value="load" /> <input type="button" id="testget" name="testget" value="get" /> <input type="button" id="testpost" name="testpost" value="post" /> <input type="button" id="testscript" name="testscript" value="script" /> <input type="button" id="testjson" name="testjson" value="json" /> </div> <!-- 展示 --> <div id="showinfo"> <ul> <li id="id1"></li> </ul> </div> <!--test end --> </body> <!-- jQuery (ZUI中的Javascript组件依赖于jQuery) --> <script type="text/javascript" src="../../../js/jquery-2.1.3.min.js"></script> <!-- ZUI Javascript组件 --> <script src="../../../dist/js/zui.min.js"></script> <script src="../../../dist/lib/datetimepicker/datetimepicker.js"></script> <script src="../../../js/jd/index.js"></script> </html></span>
js代码:
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页面 <span style="font-size:14px;"><%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>首页</title> <!-- zui --> <link href="../../../dist/css/zui.min.css" rel="stylesheet"> <link href="../../../dist/lib/datetimepicker/datetimepicker.css" rel="stylesheet"> </head> <body style="background-color: #fcfcfc;"> <div class="container"> <div class="panel"> <div class="panel-heading" style="text-align: center;">首页</div> <div class="panel-body"> <div class="form-horizontal"> <div style="margin-bottom: 1%;"> <a href="stocklist.do" target="blank"> <i class="icon icon-link"></i>库存查询 </a> </div> <div style="margin-bottom: 1%;"> <a href="priceStock.do" target="blank"> <i class="icon icon-link"></i>库存价格查询 </a> </div> </div> </div> </div> </div> <!--test begin--> <div> <input type="button" id="testload" name="testload" value="load" /> <input type="button" id="testget" name="testget" value="get" /> <input type="button" id="testpost" name="testpost" value="post" /> <input type="button" id="testscript" name="testscript" value="script" /> <input type="button" id="testjson" name="testjson" value="json" /> </div> <!-- 展示 --> <div id="showinfo"> <ul> <li id="id1"></li> </ul> </div> <!--test end --> </body> <!-- jQuery (ZUI中的Javascript组件依赖于jQuery) --> <script type="text/javascript" src="../../../js/jquery-2.1.3.min.js"></script> <!-- ZUI Javascript组件 --> <script src="../../../dist/js/zui.min.js"></script> <script src="../../../dist/lib/datetimepicker/datetimepicker.js"></script> <script src="../../../js/jd/index.js"></script> </html></span> js代码: $(function() { $("#testload").on("click", function() { myobj.fload(); }); }); var myobj = { fload : function() { var obj = {}; $("#showinfo").load("index.do", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(restext); }); }, fget : function() { }, fpost : function() { }, fscript : function() { }, fjson : function() { } } 后台java代码即controller层: /** * 首页 * @param request * @param response * @return */ @RequestMapping(value="index") public String test(HttpServletRequest request, HttpServletResponse response) { return "jd/index"; } (2)、页面展示: 访问的页面 当我们单击load按钮时做的事情就是调用load方法发送请求到后台,然后把index.jsp这个整个的页面返回到laod方法,再将返回的这个页面加载到当前的index页面指定的div下,效果如下: 返回加载后的页面 还发现没,下面多了个status:success 这是在load方法的回调函数中进行的操作: js代码如下: fload : function() { var obj = {}; $("#showinfo").load("index.do", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(restext); }); }, 其中的function就是load方法的回调方法,其中有三个参数即load方法请求返回的内容、请求状态和XMLHttpRequest对象! 发现没浏览器页面console控制台输出的就是整个index页面,因为我们在load方法的回调函数中打印了返回的信息! ok这样就测试了一个load方法的demo,下面来看看,url中添加过滤条件的情况: js代码: fload : function() { var obj = {}; $("#showinfo").load("index.do .container", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(responseText); }); } 在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 fget : function() { var obj={}; obj.param="hello gettest!"; //get和load不同,只有在请求成功的情况下才会触发回调函数,回调函数的参数只有两个即请求返回的内容和请求状态, $.get("gettest.do",obj,function(responseText,textStatus){ alert("responseText:"+responseText +" textStatus:"+textStatus); },"text"); } 4、java代码控制层 @RequestMapping(value="gettest") public void loadtest(HttpServletRequest request, HttpServletResponse response){ String param= request.getParameter("param"); System.out.println("loadtest:"+param); setServletResponse(response); out.print("load"+param); } 5、运行结果: 这是一个完整的$.get()demo, $.get()总结: 1、get请求的回调函数只有两个参数即请求返回的信息和请求状态! 2、只有请求成功后才会调用回调函数而不像load方法不管成功还是失败都会调用回调函数! 3、Type参数,定义了请求返回的数据格式,按照自己需求进行定义支持如下几种格式:xml、html、script、json、text! 三、$.post()方法 1、$.post()和$.get()两种方法除了传递参数的方式不同即一个是get方法一个是post方式其他的都一样! 2、js 的demo: fpost : function() { var obj={}; obj.param="hello gettest!"; $.post("posttest.do",obj,function(responseText,textStatus){ alert("responseText:"+responseText +" textStatus:"+textStatus); },"text"); } 3、java代码控制层: <span style="font-size:14px;">@RequestMapping(value="posttest") public void loadtest(HttpServletRequest request, HttpServletResponse response){ String param= request.getParameter("param"); System.out.println("loadtest:"+param); setServletResponse(response); out.print("load"+param); }</span> 四、$.getScript() 不好意思 这个自己demo访问不了!!! 五、 $.getJSON()方法 1、$.getJSON()方法格式:$.getJSON(url,callback); 即请求地址和回调函数,回调函数中处理返回的结果! 2、$.getJSON()方法demo: (1)、js代码 fjson : function() { $.getJSON("jsontest.do",function(data){ //返回json格式的数据 var jsonObj = data; var name = jsonObj.name; var age = jsonObj.age; console.log("name:"+name +" age:"+age); }); } (2)、java代码控制层 @RequestMapping(value="jsontest") public void loadtest(HttpServletRequest request, HttpServletResponse response){ setServletResponse(response); JSONObject json = new JSONObject(); json.put("name", "whd"); json.put("age", 12); out.print(json.toString()); } (3)、运行结果: ok 到此jquery的各种ajax请求方法都ok了,当然还有$.ajax()方法,我们用的也是比较多的,这里就不说了! 六、$.each()函数 1、$.each()函数不同于jquery对象的each()方法,他是一个全局函数,不操作jquery对象,而是以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。回调函数拥有两个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容! 2、demo展示: getaddress1:function(id){ $.ajax({ type:'post', url:'jdaddress.do', dataType:'json', async:false, success:function(data){ var json=data; var text='<option value=0>省份</option>'; $.each(json, function(i, val) { text =text+'<option value='+val+'>'+i+'</option>'; }); console.log("text:"+text); $("#province").empty(); $("#province").append(text); } }); } 返回数据即data即json的格式为: { "北京": 1, "上海":2, "黑龙江": 10 } 返回的数据也就是一个json对象,再来看$.each(json,function(i,val){ })在json为对象时i就是json的key而val就是json的key对应的value值。 如果json是个数组则i就是数组中的索引而val就是数组中索引对应的值即有可能就是一个json对象! 七、五种方法的js $(function() { //方法触发调用 $("#testload").on("click", function() { myobj.fload(); }); $("#testget").on("click", function() { myobj.fget(); }); $("#testpost").on("click", function() { myobj.fpost(); }); $("#testscript").on("click", function() { myobj.fscript(); }); $("#testjson").on("click", function() { myobj.fjson(); }); }); var myobj = { // load方法 fload : function() { var obj = {}; $("#showinfo").load("index.do .container", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(responseText); }); }, // get方法 fget : function() { var obj = {}; obj.param = "hello gettest!"; // get和load不同,只有在请求成功的情况下才会触发回调函数,回调函数的参数只有两个即请求返回的内容和请求状态, $.get("gettest.do", obj, function(responseText, textStatus) { alert("responseText:" + responseText + " textStatus:" + textStatus); }, "text"); }, // post方法 fpost : function() { var obj = {}; obj.param = "hello gettest!"; $.post("posttest.do", obj, function(responseText, textStatus) { alert("responseText:" + responseText + " textStatus:" + textStatus); }, "text"); }, // script方法 fscript : function() { $ .getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js"); }, // json方法 fjson : function() { $.getJSON("jsontest.do", function(data) { // 返回json格式的数据 var jsonObj = data; var name = jsonObj.name; var age = jsonObj.age; console.log("name:" + name + " age:" + age); }); } } 这里只给出js不给java是因为他们和我们平时些的$.ajax()方法的处理是一样的,接收请求参数,后台处理数据,返回数据到请求方法,回调函数中处理返回的信息! $.getJSON()在跨域问题中的应用:http://blog.csdn.net/qh_java/article/details/50193583
后台java代码即controller层:
/** * 首页 * @param request * @param response * @return */ @RequestMapping(value="index") public String test(HttpServletRequest request, HttpServletResponse response) { return "jd/index"; }
(2)、页面展示:
访问的页面
当我们单击load按钮时做的事情就是调用load方法发送请求到后台,然后把index.jsp这个整个的页面返回到laod方法,再将返回的这个页面加载到当前的index页面指定的div下,效果如下:
返回加载后的页面
还发现没,下面多了个status:success 这是在load方法的回调函数中进行的操作:
js代码如下:
fload : function() { var obj = {}; $("#showinfo").load("index.do", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(restext); }); },
其中的function就是load方法的回调方法,其中有三个参数即load方法请求返回的内容、请求状态和XMLHttpRequest对象!
发现没浏览器页面console控制台输出的就是整个index页面,因为我们在load方法的回调函数中打印了返回的信息!
ok这样就测试了一个load方法的demo,下面来看看,url中添加过滤条件的情况:
js代码:
fload : function() { var obj = {}; $("#showinfo").load("index.do .container", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(responseText); }); }
在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
fget : function() { var obj={}; obj.param="hello gettest!"; //get和load不同,只有在请求成功的情况下才会触发回调函数,回调函数的参数只有两个即请求返回的内容和请求状态, $.get("gettest.do",obj,function(responseText,textStatus){ alert("responseText:"+responseText +" textStatus:"+textStatus); },"text"); }
4、java代码控制层
@RequestMapping(value="gettest") public void loadtest(HttpServletRequest request, HttpServletResponse response){ String param= request.getParameter("param"); System.out.println("loadtest:"+param); setServletResponse(response); out.print("load"+param); }
5、运行结果:
这是一个完整的$.get()demo,
$.get()总结:
1、get请求的回调函数只有两个参数即请求返回的信息和请求状态!
2、只有请求成功后才会调用回调函数而不像load方法不管成功还是失败都会调用回调函数!
3、Type参数,定义了请求返回的数据格式,按照自己需求进行定义支持如下几种格式:xml、html、script、json、text!
三、$.post()方法
1、$.post()和$.get()两种方法除了传递参数的方式不同即一个是get方法一个是post方式其他的都一样!
2、js 的demo:
fpost : function() { var obj={}; obj.param="hello gettest!"; $.post("posttest.do",obj,function(responseText,textStatus){ alert("responseText:"+responseText +" textStatus:"+textStatus); },"text"); }
3、java代码控制层:
<span style="font-size:14px;">@RequestMapping(value="posttest") public void loadtest(HttpServletRequest request, HttpServletResponse response){ String param= request.getParameter("param"); System.out.println("loadtest:"+param); setServletResponse(response); out.print("load"+param); }</span>
四、$.getScript()
不好意思 这个自己demo访问不了!!!
五、 $.getJSON()方法
1、$.getJSON()方法格式:$.getJSON(url,callback); 即请求地址和回调函数,回调函数中处理返回的结果!
2、$.getJSON()方法demo:
(1)、js代码
fjson : function() { $.getJSON("jsontest.do",function(data){ //返回json格式的数据 var jsonObj = data; var name = jsonObj.name; var age = jsonObj.age; console.log("name:"+name +" age:"+age); }); }
(2)、java代码控制层
@RequestMapping(value="jsontest") public void loadtest(HttpServletRequest request, HttpServletResponse response){ setServletResponse(response); JSONObject json = new JSONObject(); json.put("name", "whd"); json.put("age", 12); out.print(json.toString()); }
(3)、运行结果:
ok 到此jquery的各种ajax请求方法都ok了,当然还有$.ajax()方法,我们用的也是比较多的,这里就不说了!
六、$.each()函数
1、$.each()函数不同于jquery对象的each()方法,他是一个全局函数,不操作jquery对象,而是以一个数组或者对象作为第1个参数,以一个回调函数作为第2个参数。回调函数拥有两个参数:第1个为对象的成员或数组的索引,第2个为对应变量或内容!
2、demo展示:
getaddress1:function(id){ $.ajax({ type:'post', url:'jdaddress.do', dataType:'json', async:false, success:function(data){ var json=data; var text='<option value=0>省份</option>'; $.each(json, function(i, val) { text =text+'<option value='+val+'>'+i+'</option>'; }); console.log("text:"+text); $("#province").empty(); $("#province").append(text); } }); }
返回数据即data即json的格式为:
{ "北京": 1, "上海":2, "黑龙江": 10 }
返回的数据也就是一个json对象,再来看$.each(json,function(i,val){ })在json为对象时i就是json的key而val就是json的key对应的value值。
如果json是个数组则i就是数组中的索引而val就是数组中索引对应的值即有可能就是一个json对象!
七、五种方法的js
$(function() { //方法触发调用 $("#testload").on("click", function() { myobj.fload(); }); $("#testget").on("click", function() { myobj.fget(); }); $("#testpost").on("click", function() { myobj.fpost(); }); $("#testscript").on("click", function() { myobj.fscript(); }); $("#testjson").on("click", function() { myobj.fjson(); }); }); var myobj = { // load方法 fload : function() { var obj = {}; $("#showinfo").load("index.do .container", { name : "zhangsan", age : "21" }, function(responseText, textStatus, XMLHttpRequest) { $("#id1").html("status:" + textStatus); console.log(responseText); }); }, // get方法 fget : function() { var obj = {}; obj.param = "hello gettest!"; // get和load不同,只有在请求成功的情况下才会触发回调函数,回调函数的参数只有两个即请求返回的内容和请求状态, $.get("gettest.do", obj, function(responseText, textStatus) { alert("responseText:" + responseText + " textStatus:" + textStatus); }, "text"); }, // post方法 fpost : function() { var obj = {}; obj.param = "hello gettest!"; $.post("posttest.do", obj, function(responseText, textStatus) { alert("responseText:" + responseText + " textStatus:" + textStatus); }, "text"); }, // script方法 fscript : function() { $ .getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js"); }, // json方法 fjson : function() { $.getJSON("jsontest.do", function(data) { // 返回json格式的数据 var jsonObj = data; var name = jsonObj.name; var age = jsonObj.age; console.log("name:" + name + " age:" + age); }); } }
这里只给出js不给java是因为他们和我们平时些的$.ajax()方法的处理是一样的,接收请求参数,后台处理数据,返回数据到请求方法,回调函数中处理返回的信息!
$.getJSON()在跨域问题中的应用:http://blog.csdn.net/qh_java/article/details/50193583