后台接受不到参数问题
在学习使用angular的$http.post()提交数据时,后台接收不到参数值,于是查阅了相关资料,寻找解决办法。
前期使用jQuery ajax请求:

后台为java,可以取参数。

后期使用angularJS 的http进行请求后,

后台取出的参数为null。
查阅资料后发现在angular中,$http的contentType默认值是
application/json;charset=UTF-8
这样在后台,SpringMVC通过@RequestParam注解或者request.getParameter()方法是获取不到参数的。

加如下代码

改动后参数在Form Data内,后台测试可以取参数:

引入jQuery的话 也可写成
$http({
method:'post',
url:'http://192.168.0.116:8080/HighSpeed/speedController/getCode',
data:$.param({province: '四川'}),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
源代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<div ng-app="myApp" ng-controller="siteCtrl">
<ul>
<li ng-repeat="x in names">
{{ x}}
</li>
</ul>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('siteCtrl', function($scope, $http) {
$http({
method:'post',
url:'http://192.168.0.109:8080/HighSpeed/speedController/getCode',
data:{province: '四川'},
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
transformRequest: function(obj) {
var str = [];
for (var p in obj) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
})
.success(function (response) {$scope.names = response.list;
});
});
</script>
</body>
</html>
跨域问题###
服务器设置:
/** 设置响应头允许ajax跨域访问 **/
response.setHeader("Access-Control-Allow-Origin", "*");
/* 星号表示所有的异域请求都可以接受, */
response.setHeader("Access-Control-Allow-Methods", "POST");
response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
网友评论