【问题标题】:Angular $http.jsonp failingAngular $http.jsonp 失败
【发布时间】:2017-05-23 23:11:12
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs jsonp angular-http


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 如果我通过我的域发送请求,我不会收到 CORS 错误吗?
    • 不,当然不是。 CORS 只是沙盒浏览器中存在的一个概念,并且是对 javascript 的限制。在您的服务器上,您可以使用 PHP 等服务器端语言对您想要的任何域执行任何请求。
    猜你喜欢
    • 2015-10-08
    • 2014-01-01
    • 2015-11-25
    • 1970-01-01
    • 2017-11-07
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多