angularjs - 为什么我在尝试访问公共 API 时会在 CORS 上被阻止?
问题描述
我正在尝试通过我的 AngularJS Web 应用程序访问安大略省政府的 COVID-19 案例 CKAN API。但是,这个请求:
var url = "https://data.ontario.ca/api/3/action/datastore_search?q=jones&resource_id=455fd63b-603d-4608-8216-7d8647f43350"
return $http.get(url).then(function (data) {
console.log(data)
return data;
});
};
得到回应:
从源“ http://localhost:3000 ”访问“ https://data.ontario.ca/api/3/action/datastore_search?q=jones&resource_id=455fd63b-603d-4608-8216-7d8647f43350 ”的 XMLHttpRequest被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。
该网站给出了通过 JavaScript 访问 API 的示例:
var data = {
resource_id: '455fd63b-603d-4608-8216-7d8647f43350', // the resource id
limit: 5, // get 5 results
q: 'jones' // query for 'jones'
};
$.ajax({
url: 'https://data.ontario.ca/api/3/action/datastore_search',
data: data,
dataType: 'jsonp',
success: function(data) {
alert('Total results found: ' + data.result.total)
}
});
如何从我的 AngularJS Web 应用程序成功地向这个 api 发出请求?
解决方案
我能够通过使用JSONP请求而不是标准 GET 来解决这个问题。
var url = "https://data.ontario.ca/api/3/action/datastore_search?q=jones&resource_id=455fd63b-603d-4608-8216-7d8647f43350"
return $http.jsonp($sce.trustAsResourceUrl(url)).then(function (data) {
return data;
});
推荐阅读
- excel - 在 Excel 中使用 vba 创建包含数据的多个工作表
- odata - 如何使用 OData 模型处理绑定单个实体
- css - Firefox:图像容器的宽度计算不正确(更新 1)
- nginx - 如何在 Nginx 流模块中使用自定义错误页面
- multithreading - OpenMPI 和 OpenMP 核心绑定
- visual-studio-code - 在 Visual Studio 代码中,如何扩展最大线宽
- csv - CSV 输出文件中未显示引号
- ios - AppleMetalGLRenderer 崩溃
- python - 根据 Pandas 数据框中的一个月,添加具有布尔值的列
- python - 我在将循环中生成的答案存储到不同数组时遇到问题