【发布时间】:2016-05-22 02:56:09
【问题描述】:
我已尝试在stackoverflow 中针对此问题提供已接受的答案。
在 angularjs 中,当我向本地 Api 发送 post 请求时它可以工作。但是当我更改为跨域 api 时它不起作用。
这是我的代码
var myapp = angular.module('myApp',['ngRoute','http-auth-interceptor'])
.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}])
.factory('featuresData', function ($http) {
return{
doCrossDomainGet: function(data) {
return $http({
url:'http://example.com/api/login',
type: "POST",
crossDomain: true,
data: JSON.stringify({"username":"test_teacher" , "password":"123"}),
contentType: 'application/json; charset=utf-8',
dataType: "json",
success: function (response) {
console.log(response);
},
error: function (xhr, status) {
alert("error");
}
})
}
}
});
我在控制台中收到此消息:
XMLHttpRequest 无法加载 example.com/api/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。来源“本地主机”;因此不允许访问。响应的 HTTP 状态代码为 405。
Api 在 Android,Ios 客户端应用程序和 CURL 中运行良好
curl command
curl -X POST -H "Accept: Application/json" -H "Content-Type: application/json" http://example.com/api/login -d '{"username":"test_teacher","password":"123"}'
curl output
{"username":"test_teacher","roles":["ROLE_TEACHER"],"access_token":"7q8dcreo5bngk32jq8nmefrfgp6nope2"}
【问题讨论】:
-
您是否尝试在服务器端添加访问权限以允许来源(针对请求)?
-
您确定您的“example.com” uri 接受 POST -Data 吗? 405 表示“方法不允许”,也许他们只接受 GET/PUT?您是否分析了响应标头?它应该说明,允许哪些方法
-
@kfis POST 方法允许在服务器上使用,但我无法从服务器获得任何响应。我在控制台中收到此消息`XMLHttpRequest 无法加载example.com/api/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'localhost'。响应的 HTTP 状态代码为 405。`
-
@V31 是否可以强制 Angular 进行跨域请求,即使服务器中未设置对 allow-origins 的访问权限?
-
你可以试试
dataType: "jsonp",
标签: javascript angularjs grails cors