Angularjs 无法通过angular从API获得响应?
我的代码如下Angularjs 无法通过angular从API获得响应?,angularjs,Angularjs,我的代码如下 $scope.LoadSearchResults = function () { $scope.hotels = ''; $scope.allData = ''; var mydata = ''; $http({ url: 'myurl', Authorization : 'code', method: 'POST', he
$scope.LoadSearchResults = function () {
$scope.hotels = '';
$scope.allData = '';
var mydata = '';
$http({
url: 'myurl',
Authorization : 'code',
method: 'POST',
header: { 'Content-type': 'text/json' }
})
.success(function (mydata) {
$scope.hotels = JSON.parse(JSON.stringify(mydata.SearchResponse.Hotels.Hotel));
$scope.allData = JSON.parse(JSON.stringify(mydata.SearchResponse.Hotels.Hotel));
$scope.AllLocality($scope.allData);
})
.error(function (mydata) {
$scope.hotels = "Failed";
console.log(JSON.stringify(mydata));
});
}
而获得错误是非常困难的
“跨源请求被阻止:同一源策略不允许在读取远程资源。(原因:CORS标头“访问控制允许源”丢失)。”
如何解决这个问题?这不是角度问题 原因是您正在触发一个跨源请求(例如,您的应用程序位于一个域上,并且由
url:'myurl'
指定的请求用于另一个域),HTTP不允许这样做,除非接收请求的服务器通过向响应中添加CORS头来专门添加权限
要解决您的问题,请在此处选择4个选项之一(我相信您可以根据具体设置找到更多选项):
- 使您的应用程序向同一域发出请求,这通常是首选和最安全的方法(例如,托管angular code的web应用程序还负责通过
响应您正在执行的xhr)$http
- 如果您可以控制服务器如何创建响应,那么添加这样的头应该相当容易(我不能在这里添加示例,因为它完全依赖于您使用的web服务器或应用程序网关)
- 如果您无法控制服务器响应(并且最重要的是它的报头),您可以在中间充当一个请求代理添加您自己的服务器,从而使您的JS应用程序向服务器发出请求(不引起CORS问题),服务器本身向第三方提供商 提出代理请求。
- 如果您只需要GET请求(代码段中的情况似乎不是这样),如果服务器支持此类请求,则可以使用angular的
$http
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
请在父项之后传递控制器上的头::\u construct() 你好,格鲁,谢谢你的回复。因为我没有访问服务器的权限,所以我不确定服务器的响应。还有其他解决办法吗?我也在尝试下面的代码…$http({method:“Post”,url:$rootScope.ServiceBaseUri+“ControllerName/Function”,data:{Email:Email},datatype:“json”})。success(Function(res){accesstoken=res.MESSAGE;})嘿@Samy我刚刚用几个其他选项编辑了我的答案。n、 如果您真的需要进行跨域请求,那么3可能是最安全的,但是需要一些额外的(后端)编码