Angular $ http.jsonp失败

时间:2017-01-09 16:17:35

标签: javascript angularjs jsonp angular-http

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

1 个答案:

答案 0 :(得分:0)

您收到此错误的原因是,即使您指定了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请求发送到您的脚本。