Angular JS POST请求不发送JSON数据

我试图发送一个对象作为JSON到我的Web服务在Flask,期待在请求数据中的JSON。

我已通过发送JSON数据手动testing服务,它工作正常。 但是,当我尝试通过angular度控制器发出http POST请求时,Web服务器向我发送一条消息,指出它没有收到JSON。

当我在Chrome中检查请求标题时,看起来数据不是以JSON发送的,而是通过内容types设置为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 

如果您看到请求有效负载下面的最后一行,则可以看到数据不是JSON格式。

这是我angular度控制器中的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到服务器。

真的很感激,如果有人可以帮忙。

如果你是序列化你的数据对象,它不会是一个合适的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; }); 

我试过你的例子,它工作得很好:

 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?

你可以使用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 } }) 

这个解决scheme来自http://uncorkedstudios.com/blog/multipartformdata-file-upload-with-angularjs

你可以通过这种方式使用你的方法

 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) { }); 

尝试使用绝对url。 如果不起作用,请检查服务的响应是否有标题:

Access-Control-Allow-Origin和Access-Control-Allow-Headers

例如:

 "Access-Control-Allow-Origin": "*" "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept" 

您可以使用以下来查找发布的数据。

data = json.loads(request.raw_post_data)

 $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; });