我正在尝试从this endpoint获取结果。使用GET我得到CORS错误所以我正在尝试jsonp。
结果
Refused to execute script from 'https://api.airbnb.com/v2/listings/16218947?client_id=3092nxybyb0otqw18e8nh5nty&_format=v1_legacy_for_p3&callback=angular.callbacks._0'
because its MIME type ('application/json') is not executable,
and strict MIME type checking is enabled.
我的代码是
var API_BASE_URL = 'https://api.airbnb.com/v2/';
function getListing(id) {
var url = API_BASE_URL + 'listings/' + id + '?client_id=3092nxybyb0otqw18e8nh5nty&_format=v1_legacy_for_p3';
var trusted = $sce.trustAsResourceUrl(url);
return $http.jsonp(trusted, {
jsonpCallbackParam: 'callback',
headers: {
'Accept': 'application/javascript'
}
});
};
答案 0 :(得分:0)
您收到此错误的原因是,即使您指定了callback
参数,端点仍会返回JSON,这可能意味着端点也不支持JSONP。
这是JSON而不是JSONP内容,这是服务器在这种情况下需要返回的内容。
基本上$http.jsonp
的实现方式是它在DOM中注入一个<script>
元素,其src
属性指向提供的url。但是由于服务器没有将JSON包装到回调函数(JSONP)中,因此不能将其作为有效脚本包含在内,从而导致错误。
由于CORS和JSONP不是选项,您可能需要在域上编写一个服务器端脚本,作为域和远程域之间的代理。然后将AJAX请求发送到您的脚本。