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);
}
); }; });
答案 0 :(得分:4)
我遇到了问题。通过深度搜索我得到..
对于跨域请求,将内容类型设置为application/x-www-form-urlencoded
,multipart/form-data
或text/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/内容类型了解详情