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注解修饰.
来源:CSDN
作者:风泊月
链接:https://blog.csdn.net/hello_word2/article/details/104875116