Angular jsonp请求coursera api给出错误

时间:2016-09-15 21:39:30

标签: javascript angularjs cors jsonp coursera-api

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

  

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

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

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

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;

1 个答案:

答案 0 :(得分:1)

  

拒绝执行脚本...因为其MIME类型('application / json')不可执行

网址https://api.coursera.org/api/courses.v1?callback=JSON_CALLBACK正在返回JSON,而不是JSONP。

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

  

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

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

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