0

当我尝试在 Angular 中使用 jsonp 方法请求 coursera api 时,会出现以下错误。

拒绝执行来自' https://api.coursera.org/api/courses.v1?callback=angular.callbacks._0 '的脚本,因为它的 MIME 类型('application/json')是不可执行的,并且严格的 MIME 类型检查已启用。

我已经完成了其他答案,但找不到正确的解决方案。

这是我认为正确完成的代码,因为它成功地获取了其他 CORS 资源。我不知道 coursera api 发生了什么。

var deferred = $q.defer();
var url = "https://api.coursera.org/api/courses.v1?callback=JSON_CALLBACK";
$http.jsonp(url).success(function(data) {
  deferred.resolve(data);
  })
  .error(function(data, status, headers, config) {
    deferred.reject(status);
    });
return deferred.promise;
4

1 回答 1

1

拒绝执行脚本……因为它的 MIME 类型('application/json')不可执行

URLhttps://api.coursera.org/api/courses.v1?callback=JSON_CALLBACK返回 JSON,而不是 JSONP。

当您发出 JSONP 请求时,服务器必须使用 JSONP 格式的数据(这是一种特殊形式的 JavaScript 脚本)进行响应。您正在与之交谈的服务器没有。

这是我认为正确完成的代码,因为它成功地获取了其他 CORS 资源。

JSONP 是我们在 CORS 存在之前使用的。这是一个聪明但肮脏的黑客,具有一些安全隐患。

如果您可以改用 CORS,请改用 CORS。(服务器似乎也没有授予 CORS 权限,这使您不得不通过另一台服务器而不是直接从客户端获取数据)

于 2016-09-15T21:44:36.317 回答