1.ajax複習
a)ajax是一種能夠進行局部頁面刷新的藝術. 變同步操作爲異步操作.
b)原生ajax操作的步驟:
- 創建對象XmlHttpRequest.
- 監聽事件onreadystatechange
- 準備請求, 調用open方法
- 發送請求, 調用send方法
- 接收響應內容, responseText來接收響應文本信息
c)jquery對ajax的支持:
- $.ajax({}), url, method, data, dataType, success, error, …
- $.get(url, data, success, dataType), $.post(url, data, success, dataType), $.getJSON(url, data, success), $.getScript(url, success)
- doc.load(url, data, function), 要求返回內容格式爲html, 直接將返回的內容追加到doc元素內部.
2.SpringMVC實現ajax操作
- 使用@ResponseBody註解可以使控制器方法不進行頁面跳轉, 而是直接響應內容.
- 當響應內容是字符串時, SpringMVC會自動設置響應頭爲”text/html;charset=ISO-8859-1”, 需要通過produces屬性進行修改;
- 當響應內容是對象時, SpringMVC會嘗試將對象轉換爲json格式. 此時需要依賴jackson的包. 同時, 自動設置響應頭爲”application/json;charset=UTF-8”.
@Controller
@RequestMapping("/demo")
public class DemoController {
/**
* ajax返回json格式的user對象
*
* @return
*/
@GetMapping("/demo3")
@ResponseBody
public User demo3() {
User user = new User();
user.setId(123);
user.setName("張三");
user.setBirthday(new Date());
return user;
}
/**
* SpringMVC中ajax的實現
* ResponseBody註解的作用是告訴SpringMVC, 不進行頁面跳轉, 而是進行數據輸出
* @param username
* @return
*/
@PostMapping(value = "/demo2", produces = "text/html;charset=UTF-8")
@ResponseBody
public String demo2(@RequestParam(defaultValue = "mvc") String username) {
String msg = "<h2>hello " + username + "</h2>";
return msg;
}
/**
* 原生實現方式
*
* @param username
* @param resp
* @throws Exception
*/
@PostMapping("/demo1")
public void demo1(
@RequestParam(defaultValue = "mvc") String username,
HttpServletResponse resp) throws Exception {
String msg = "<h2>hello " + username + "</h2>";
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().print(msg);
}
}
public class User implements Serializable {
private Integer id;
@JsonProperty("username") // 設置轉換時的名稱
private String name;
@DateTimeFormat(pattern = "yyyy-MM-dd") // springmvc提供, 用於接收請求參數時日期的轉換
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") // jackson提供,日期和json字符串轉換時使用
private Date birthday;
}
- 可以使用@RestController簡化配置, 從spring4開始提供, 表示當前控制器下所有的方法都被ResponseBody註解修飾.