警告:我是一名前端开发人员,我对服务器的经验不多。
我正在使用Angular 1.2构建一个应用程序,该应用程序在不同的子域上执行API。该项目的后端开发人员正在使用nginx并将其设置为允许跨域请求,实质上是转发子域,或类似的东西,我相信。我可以很好地执行$http.get
请求,但是当我尝试$http.post
时,我收到了Access-Control-Allow-Origin错误。
以下是踢球者:我可以使用jQuery的$.ajax
发出相同的请求,但效果很好。
$.ajax({
type: 'POST',
url: 'http://api.mydomain.com/v1/customer/',
data: theData,
contentType: 'application/x-www-form-urlencoded',
//contentType: 'text/plain',
//crossDomain: true,
success: function(){
console.log("sent data via jquery");
}
});
以下是我设置Angular的方法:
var myServices = angular.module("myServices", []);
myServices.config(function($httpProvider) {
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
});
和
save: function(payload){
console.dir($http);
return $http.post('http://api.mydomain.com/v1/customer/', payload).then(function(result){
return result;
});
},
我错过了什么?
答案 0 :(得分:1)
非常接近,我看到你正在使用.then()
,所以只需按照承诺返回模式在控制器中取出它:
return $http.post('http://api.mydomain.com/v1/customer/', payload).then(function(result){
return result.data;
});
你的控制器(我不知道你的服务是什么,用名称替换TestService
):
TestService.save(param).then(function(data) {
console.log(data); //Hello data!
});
答案 1 :(得分:1)
在这里找到答案:
http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/
Angular发送序列化的JSON,jQuery发送查询字符串。
答案 2 :(得分:0)
这可能是与CORS相关的问题,特别是与X-Requested-With标头有关。 看这篇文章: How to load a cross-domain JSON with $http in angularjs 1.0.8 as it does with 1.2.0