我正在尝试将对象作为JSON发送到我在Flask中的Web服务,期望请求数据中有JSON。
我已经通过发送JSON数据手动测试了服务,它运行正常。但是,当我尝试通过角度控制器发出http POST请求时,Web服务器会向我发送一条消息,说明它没有收到JSON。
当我检查Chrome中的请求标头时,似乎数据没有以JSON格式发送,但是即使通过内容类型将常规键/值对设置为application / json
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:49
Content-Type:application/json;charset=UTF-8
DNT:1
Host:localhost:5000
Origin:http://localhost:5000
Referer:http://localhost:5000/
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
application=AirFare&d1=10-APR-2013&d2=14-APR-2013
如果您看到Request Payload下面的最后一行,您可以看到数据不是JSON格式。
这是我的角度控制器中的HTTP POST调用:
$http({
url: '/user_to_itsr',
method: "POST",
data: {application:app, from:d1, to:d2},
headers: {'Content-Type': 'application/json'}
}).success(function (data, status, headers, config) {
$scope.users = data.users; // assign $scope.persons here as promise is resolved here
}).error(function (data, status, headers, config) {
$scope.status = status + ' ' + headers;
});
};
我将数据作为对象{}发送但我在JSON.stringify序列化之后尝试发送它,但是,我没做什么似乎将JSON发送到服务器。
真的很感激,如果有人可以提供帮助。
答案 0 :(得分:49)
如果要序列化数据对象,则它不是正确的json对象。拿走你拥有的东西,然后将数据对象包装在JSON.stringify()
。
$http({
url: '/user_to_itsr',
method: "POST",
data: JSON.stringify({application:app, from:d1, to:d2}),
headers: {'Content-Type': 'application/json'}
}).success(function (data, status, headers, config) {
$scope.users = data.users; // assign $scope.persons here as promise is resolved here
}).error(function (data, status, headers, config) {
$scope.status = status + ' ' + headers;
});
答案 1 :(得分:10)
我试过你的例子,它运作得很好:
var app = 'AirFare';
var d1 = new Date();
var d2 = new Date();
$http({
url: '/api/test',
method: 'POST',
headers: { 'Content-Type': 'application/json' },
data: {application: app, from: d1, to: d2}
});
输出:
Content-Length:91
Content-Type:application/json
Host:localhost:1234
Origin:http://localhost:1234
Referer:http://localhost:1234/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
{"application":"AirFare","from":"2013-10-10T11:47:50.681Z","to":"2013-10-10T11:47:50.681Z"}
您使用的是最新版本的AngularJS吗?
答案 2 :(得分:2)
您可以使用FormData API https://developer.mozilla.org/en-US/docs/Web/API/FormData
var data = new FormData;
data.append('from', from);
data.append('to', to);
$http({
url: '/path',
method: 'POST',
data: data,
transformRequest: false,
headers: { 'Content-Type': undefined }
})
来自http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs
的此解决方案答案 3 :(得分:2)
您可以通过这种方式使用您的方法
var app = 'AirFare';
var d1 = new Date();
var d2 = new Date();
$http({
url: '/api/apiControllerName/methodName',
method: 'POST',
params: {application:app, from:d1, to:d2},
headers: { 'Content-Type': 'application/json;charset=utf-8' },
//timeout: 1,
//cache: false,
//transformRequest: false,
//transformResponse: false
}).then(function (results) {
return results;
}).catch(function (e) {
});
答案 4 :(得分:0)
尝试使用绝对网址。如果不起作用,请检查服务的响应是否有标题:
Access-Control-Allow-Origin和Access-Control-Allow-Headers
例如:
"Access-Control-Allow-Origin": "*"
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"
答案 5 :(得分:-1)
您可以使用以下内容查找发布的数据。
data = json.loads(request.raw_post_data)
答案 6 :(得分:-1)
$http({
url: '/api/user',
method: "POST",
data: angular.toJson(yourData)
}).success(function (data, status, headers, config) {
$scope.users = data.users;
}).error(function (data, status, headers, config) {
$scope.status = status + ' ' + headers;
});