Angular$http.jsonp 失败

Angular $http.jsonp failing

我正在尝试从 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'
    }
  });
};

您收到此错误的原因是端点,即使您指定了 callback 参数,仍然 returns JSON 这可能意味着端点没有也支持JSONP。

看这里:https://api.airbnb.com/v2/listings/16218947?client_id=3092nxybyb0otqw18e8nh5nty&_format=v1_legacy_for_p3&callback=angular.callbacks._0

这是 JSON 而不是 JSONP 内容,在这种情况下服务器需要 return。

基本上 $http.jsonp 的实现方式是它在 DOM 中注入一个 <script> 元素,其 src 属性 指向url 提供。但是由于服务器没有将 JSON 包装到回调函数 (JSONP) 中,因此无法将其作为有效脚本包含在内,因此会导致错误。

由于 CORS 和 JSONP 不是选项,您可能需要在您的域上编写一个服务器端脚本,作为您的域和远程域之间的代理。然后将 AJAX 请求发送到您的脚本。