異步呼叫
- 添加Jackson的坐標pom.xml
<!-- json坐標三個-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
接收異步請求引數的傳遞


-
jsp代碼
//為id="testAjax"的組件系結點擊事件 $("#testAjax").click(function(){ //發送異步呼叫 $.ajax({ //請求方式:POST請求 type:"POST", //請求的地址 url:"ajaxController", //請求引數(也就是請求內容) data:'ajax message', //回應正文型別 dataType:"text", //請求正文的MIME型別 contentType:"application/text", }); }); //為id="testAjaxPojo"的組件系結點擊事件 $("#testAjaxPojo").click(function(){ $.ajax({ type:"POST", url:"ajaxPojoToController", data:'{"name":"Jock","age":39}', dataType:"text", contentType:"application/json;charset=utf-8" }); }); -
java代碼
package com.yy.controller; import com.yy.domain.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @Controller public class AjaxController { // @RequestMapping("/ajaxController") // public String ajaxController(){ // System.out.println("ajax request is running..."); // return "page.jsp"; // } //普通資料pojo物件 @RequestMapping("/ajaxController") //使用@RequestBody注解,可以將請求體內容封裝到指定引數中 public String ajaxController(@RequestBody String message){ System.out.println("ajax request is running..."+message); return "page.jsp"; } //json資料 @RequestMapping("/ajaxPojoToController") //如果處理引數是POJO,且頁面發送的請求資料格式與POJO中的屬性對應,@RequestBody注解可以自動映射對應請求資料到POJO中 //注意:POJO中的屬性如果請求資料中沒有,屬性值為null,POJO中沒有的屬性如果請求資料中有,不進行映射 public String ajaxPojoToController(@RequestBody User user){ System.out.println("controller pojo :"+user); return "page.jsp"; } //json資料List @RequestMapping("/ajaxListToController") //如果處理引數是List集合且封裝了POJO,且頁面發送的資料是JSON格式的物件陣列,資料將自動映射到集合引數中 public String ajaxListToController(@RequestBody List<User> userList){ System.out.println("controller list :"+userList); return "page.jsp"; } }
異步請求接收回應資料



-
jsp代碼
//為id="testAjaxReturnString"的組件系結點擊事件 $("#testAjaxReturnString").click(function(){ //發送異步呼叫 $.ajax({ type:"POST", url:"ajaxReturnString", //回呼函式 success:function(data){ //列印回傳結果 alert(data); } }); }); //為id="testAjaxReturnJson"的組件系結點擊事件 $("#testAjaxReturnJson").click(function(){ //發送異步呼叫 $.ajax({ type:"POST", url:"ajaxReturnJson", //回呼函式 success:function(data){ alert(data);//這里彈出的是[object Object] alert(data['name']+" , "+data['age']);//這里彈出的是Jockme , 39 } }); }); //為id="testAjaxReturnJsonList"的組件系結點擊事件 $("#testAjaxReturnJsonList").click(function(){ //發送異步呼叫 $.ajax({ type:"POST", url:"ajaxReturnJsonList", //回呼函式 success:function(data){ alert(data);//[object Object],[object Object] alert(data.length);//2 alert(data[0]["name"]);//Tom alert(data[1]["age"]);//5 } }); }); -
java代碼
package com.yy.controller; import com.yy.domain.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @Controller public class AjaxController { //使用注解@ResponseBody可以將回傳的頁面不進行決議,直接回傳字串,該注解可以添加到方法上方或回傳值前面 @RequestMapping("/ajaxReturnString") // @ResponseBody //@ResponseBody有兩個添加的地方,如該例 //添加@ResponseBody過后,回傳的是page.jsp這個字串 //如果沒有添加@ResponseBody,回傳的是page.jsp這個jsp里面的jsp檔案的內容(即html)頁面 public @ResponseBody String ajaxReturnString(){ System.out.println("controller return string ..."); return "page.jsp"; } @RequestMapping("/ajaxReturnJson") @ResponseBody //基于jackon技術,使用@ResponseBody注解可以將回傳的POJO物件轉成json格式資料 public User ajaxReturnJson(){ System.out.println("controller return json pojo..."); User user = new User(); user.setName("Jockme"); user.setAge(39); return user; } @RequestMapping("/ajaxReturnJsonList") @ResponseBody //基于jackon技術,使用@ResponseBody注解可以將回傳的保存POJO物件的集合轉成json陣列格式資料 public List ajaxReturnJsonList(){ System.out.println("controller return json list..."); User user1 = new User(); user1.setName("Tom"); user1.setAge(3); User user2 = new User(); user2.setName("Jerry"); user2.setAge(5); ArrayList al = new ArrayList(); al.add(user1); al.add(user2); return al; } }
跨域訪問
-
當通過域名A下的操作訪問域名B下的資源時,稱為跨域訪問
-
跨域訪問時,會出現無法訪問的現象
如果A服務器去訪問B服務器里面的東西,這種情況就叫做跨域訪問
- 即不同域名下資訊的訪問
- 兩個不同的域:請求協議不同,IP地址不同,埠號不同,只要有一個不同就叫做跨域
同一個服務器,但是域名不同,也叫做跨域訪問
跨域訪問環境搭建:這樣配置過后,就可以使用www.jock.com訪問127.0.0.1;配置完過后,通過localhost和www.jock.com進行訪問,如此便實作該環境



-
jsp代碼
//為id="testCross"的組件系結點擊事件 $("#testCross").click(function(){ //發送異步呼叫 $.ajax({ type:"POST", url:"http://www.jock.com/cross", //回呼函式 success:function(data){ alert("跨域呼叫資訊反饋:"+data['name']+" , "+data['age']);//跨域呼叫資訊反饋:Jockme , 39 } }); }); -
java代碼
package com.yy.controller; import com.yy.domain.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; @Controller public class AjaxController { @RequestMapping("/cross") @ResponseBody //使用@CrossOrigin開啟跨域訪問 //標注在處理器方法上方表示該方法支持跨域訪問 //標注在處理器類上方表示該處理器類中的所有處理器方法均支持跨域訪問 @CrossOrigin public User cross(HttpServletRequest request){ System.out.println("controller cross..."+request.getRequestURL()); User user = new User(); user.setName("Jockme"); user.setAge(39); return user; } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/305706.html
標籤:其他
