0

警告:我是一名前端开发人员,我对服务器没有太多经验。

我正在使用 Angular 1.2 构建一个应用程序,它在不同的子域上 ping 一个 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;
        });
    },

我错过了什么?

4

3 回答 3

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!
});
于 2013-09-23T20:56:28.110 回答
1

在这里找到了答案:

http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/

Angular 发送序列化的 JSON,jQuery 发送查询字符串。

于 2013-09-24T02:38:58.020 回答
0

这可能是与 CORS 相关的问题,特别是 X-Requested-With 标头。请参阅这篇文章: 如何在 angularjs 1.0.8 中使用 $http 加载跨域 JSON,就像使用 1.2.0 一样

于 2013-09-24T01:20:30.163 回答