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