Angular和jQuery的ajax请求的区别
Angular和jQuery的ajax请求的区别介绍:
jquery是javascript对象转换了字符串,传给后台。在SpringMVC中,就可以使用@RequestParam注解或者request.getParameter()方法获取参数。而在angular中,$http的contentType默认值是application/json;charset=UTF-8,这样在后台,SpringMVC通过@RequestParam注解或者request.getParameter()方法是获取不到参数的。
使用angular发送请求(asave方法)时,使用firbug看:
使用jquery发送请求(jsave方法)时,使用firbug看:
以前使用jquery,一般使用@RequestParam注解或者request.getParameter方法接受数据。但是使用angular后,这样是接收不到数据的。如果想接收,可以这样,定义一个接收的类,要有setter和getter方法。例如:
定义User类
public class User {
public String name;
public String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
在Controller中
@RequestMapping("/asave")
@ResponseBody
public String asave(@RequestBody User user){
System.out.println("name---"+user.getName());
System.out.println("id---"+user.getId());
return "ok";
}
所以,angular默认的这种请求的传参方式,还得定义一个类,所以,在使用angular发送请求时,可以按照上面说的方法,改成jquery方式,这样,对于一些简单参数,获取就比较方便一些。
完整controller代码:
@Controller
public class MyController {
@RequestMapping("/test")
@ResponseBody
public String test(){
return "hello world";
}
@RequestMapping("/asave")
@ResponseBody
public String asave(@RequestBody User user){
System.out.println("name---"+user.getName());
System.out.println("id---"+user.getId());
return "ok";
}
@RequestMapping("/jsave")
@ResponseBody
public String jsave(@RequestParam String name, @RequestParam String id){
System.out.println("name---"+name);
System.out.println("id---"+id);
return "ok";
}
}
AngularJS:
$http.post('do-submit.php',myData).success(function(){ // some code});jQuery:
$.post('do-submit.php', myData, function() { // some code});看起来没什么区别吧?可是,用angularjs的$http提交的数据,在php服务器端却无法通过$_REQUEST/$_POST获取到,而需要用:
$params = json_decode(file_get_contents('php://input'),true);
来获取。这是因为两者的post对header的处理有所不同……jQuery会把作为JSON对象的myData序列化,例如:
var myData = { a : 1, b : 2 };
jQuery在post数据之前会把myData转换成字符串:"a=1&b=2"
而Angular不会。
注意angular和jquery的ajax请求是不同的。
在jquery中,官方文档解释contentType默认是 application/x-www-form-urlencoded; charset=UTF-8
而参数data,jquery是进行了转换的。所以,jquery是javascript对象转换了字符串,传给后台。在SpringMVC中,就可以使用@RequestParam注解或者request.getParameter()方法获取参数。
而在angular中,$http的contentType默认值是
application/json;charset=UTF-8
这样在后台,SpringMVC通过@RequestParam注解或者request.getParameter()方法是获取不到参数的。
jquery是javascript对象转换了字符串,传给后台。在SpringMVC中,就可以使用@RequestParam注解或者request.getParameter()方法获取参数。
而在angular中,$http的contentType默认值是
application/json;charset=UTF-8
这样在后台,SpringMVC通过@RequestParam注解或者request.getParameter()方法是获取不到参数的。
jquery则是基于立即响应,在ajax中第三个参数就是callback方法,
另外angular的$http方法,已经做好了很多拦截服务,$httpProvide服务
但angular有限制。