Javascript 使用AngularJS$http服务和Coinbase API检查MIME类型时出错
我正在使用AngularJS创建一个简单的应用程序,它使用 该应用程序在Chrome、Safari、Firefox和Opera中正常工作,但在Chrome Canary和IE中,我收到以下错误: 拒绝从执行脚本 '' 因为它的MIME类型('application/json')不可执行,并且 已启用严格的MIME类型检查。 我熟悉AngularJS,我使用$http服务构建了其他访问供应商API的应用程序,我没有遇到过这个问题 下面的代码应该通过Coinbase API获取即期汇率,将数据作为$http服务回调的一部分传递给作用域,并通过每60秒进行一次后续调用来刷新存储在作用域中的值Javascript 使用AngularJS$http服务和Coinbase API检查MIME类型时出错,javascript,json,angularjs,api,mime-types,Javascript,Json,Angularjs,Api,Mime Types,我正在使用AngularJS创建一个简单的应用程序,它使用 该应用程序在Chrome、Safari、Firefox和Opera中正常工作,但在Chrome Canary和IE中,我收到以下错误: 拒绝从执行脚本 '' 因为它的MIME类型('application/json')不可执行,并且 已启用严格的MIME类型检查。 我熟悉AngularJS,我使用$http服务构建了其他访问供应商API的应用程序,我没有遇到过这个问题 下面的代码应该通过Coinbase API获取即期汇率,将数据作为$
angular.module('CoinbaseApp').controller('MainCtrl', function ($scope, $http, $interval) {
$scope.getPrice = function(){
$http.jsonp('https://coinbase.com/api/v1/prices/spot_rate?callback=JSON_CALLBACK').success(function(data){
$scope.data = data;
});
};
$scope.getPrice();
$interval($scope.getPrice, 60000);
});
我的问题:严格的MIME类型检查问题是否与Coinbase如何为json服务有关?或者这是AngularJS$http服务和/或我如何请求数据的问题?对于那些询问者,我能够通过节点中的JSON代理解决我的问题 Coinbase REST API仅通过GET请求提供JSON端点,而不是JSONP(通常作为CORS替代方案提供)。如果没有JSONP,您无法向其域发出跨域请求,因为没有设置允许访问头(很可能是出于安全原因) 使用节点服务器端代理允许我通过代理在客户端发出请求,作为正常的GET请求,因为节点代理使用正确的头提供请求的返回结果
,使代理端点公开可用。当调用一个不响应相应CORS头且不直接支持JSONP的服务时,可以安装http请求拦截器以将请求重写为GET,将原始URL移动到config.params中(以及回调)。然后定义responseTransform以提取并返回嵌入的JSON:
var app = angular.module('jsonp-proxy-request-interceptor', []);
app.service('jsonpProxyRequestInterceptor',
function JsonpProxyRequestInterceptor($log) {
var callbackRx = /callback\((.+)\);/gm;
this.request = function(config) {
if (config.url === 'https://api.domain.com/' && config.method === 'GET') {
var apiUrl = config.url;
config.url = 'https://jsonp.afeld.me/';
config.params = angular.extend({}, config.params || {}, {
url: apiUrl,
callback: 'callback'
});
config.transformResponse.unshift(function(data, headers) {
var matched = callbackRx.exec(data);
return matched ? matched[1] : data;
});
}
return config;
};
});
app.config(['$httpProvider', function configHttp($httpProvider) {
$httpProvider.interceptors.push('jsonpProxyRequestInterceptor');
}]);
您也可以从中得出这个示例的要点。角度服务是一个很棒的解决方案,但是如果您在答案中嵌入代码,它将非常有用。如果您能详细说明您的答案,我将不胜感激。谢谢