CORS在jquery中运行良好,但在angularjs中运行不正常

时间:2014-06-21 11:49:16

标签: javascript jquery ajax angularjs

My Sever方面是php / mysql。

我正在另一个域的web服务中进行Ajax调用(其中启用了访问控制*)

    var postUrl = "http://logical-brains.com/elance_clone/test_login.php";
    var postData = {username : "tanmoy" , password : "123456"};

我试过Simple jQuery:

 $.ajax({
  type: "POST",
  url: postUrl,
  data: postData,
   dataType: "json",
  crossDomain: true,
  success: function(data){ console.log(JSON.stringify(data)); }
}); 

它工作正常,我得到状态代码:200 OK,预期结果。

但是当我尝试AngularJs时,低于错误:

XMLHttpRequest cannot load http://logical-brains.com/elance_clone/test_login.php. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 

AngularJs代码:

var myApp = angular.module('myApp', []);
myApp.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.useXDomain = true;
    delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);

myApp.controller('MainCtrl', function($scope, $http) {
    var postUrl = "http://logical-brains.com/elance_clone/test_login.php";
    var postData = {username : "tanmoy" , password : "123456"};
    $http({
        url: postUrl,
        method: "POST",
        data: postData,
         crossDomain: true
    })
    .then(function(result) {
            console.log("Success", result);
            $scope.someVal = JSON.stringify(result);
        }, 
        function(response) { // optional
            console.log("error "+response);
        }
    ); }; });

1 个答案:

答案 0 :(得分:4)

我遇到了问题。通过深度搜索我得到..  对于跨域请求,将内容类型设置为application/x-www-form-urlencodedmultipart/form-datatext/plain以外的任何内容都将触发浏览器向服务器发送预检OPTIONS请求。所以如果服务器不允许它会抛出错误。默认情况下,角度内容类型为application/json,它尝试发送OPTION请求。但jquery默认是 application/x-www-form-urlencoded; charset=UTF-8所以在你的情况下,jquery正在工作,而角度则不是。尝试覆盖角度默认标头。或者在服务器端允许它。这是有角度的样本:

$http.post(url,data,{
              headers : {
                'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
            }

    });

请参阅http://api.jquery.com/jquery.ajax/内容类型了解详情