Angular跨域帖子:使用某些浏览器失败

时间:2015-06-01 15:41:02

标签: javascript angularjs post cross-domain

我在Angular(1.4.0)中有一个跨域POST请求,在删除Content-Type标题后,它使用Chrome(43+)和Firefox(37+)。

但在iPhone / iPad上使用Safari或Safari / Chrome时失败了。 然后错误消息是:

  

无法加载资源:请求标头字段Content-Type不是   允许使用Access-Control-Allow-Headers。

但在日志中我可以看到:

var app = angular.module('myApp', []);

app.config(['$httpProvider', function($httpProvider) {
    console.log("original httpProvider defaults");
    console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);

    //$httpProvider.defaults.useXDomain = true;
    //delete $httpProvider.defaults.headers.common["X-Requested-With"];
    delete $httpProvider.defaults.headers.post['Content-Type'];

    console.log("updated httpProvider defaults");
    console.log("Content-Type:", $httpProvider.defaults.headers.post['Content-Type']);
}]);

app.controller('testController', function($scope, $http, $sce) {
    console.log("testController");

    $scope.url = "http://.../v0/search";
    $scope.data = { "query":"auto" };

    $scope.testPost = function() {
        $http.post($scope.url, $scope.data).
            success(function(data, status, headers, config) {
                console.log("success");
                console.log(data, status, headers, config);
            }).
            error(function(data, status, headers, config) {
                console.log("error");
                console.log(data, status, headers, config);
            });
    }
});

所以:即使标题中没有Content-Type,也会出现错误消息。

有什么建议吗?

段:

$arr = (object) array_map(function ($e) {
    return (object) $e;
}, $arr);

1 个答案:

答案 0 :(得分:0)

很抱歉打扰了你,毕竟这是一个服务器问题。 API提供程序已更新其API,现在可以正常运行。

我仍然有点好奇是什么原因导致服务器以不同的方式处理相同的请求, 当日志记录告诉我没有设置标题字段时,我真的不理解错误消息。 但它现在正在运作,这是最重要的。