我正在尝试从Google CDN加载扩展名为.json的文件:
//ajax.googleapis.com/ajax/libs/dojo/1.8/dojox/geo/charting/resources/data/USStates.json
由于跨源策略,标准 xhr 请求失败。Google CDN是否支持任何类型的跨源请求,如JSONP或CORS?你能给我看一个如何抓取上述文件的例子吗?
上面的文件是 Dojo 的一部分,但我可以使用任何其他库或普通 JavaScript。唯一的限制是从Google CDN中获取文件。
根据我得到的(缺乏)信息,Google CDN不支持任何类型的跨域访问,如JSONP或CORS。这意味着使用 CDN .json 文件的唯一方法是通过服务器代理。
对于客户端JavaScript,我必须存储文件的本地副本。
我知道这个问题已经被问了很久了,但现在谷歌存储让我们改变了 CORS 配置。
我在 CORS 方面遇到了同样的问题,并按照以下步骤解决了它。
- 使用 CORS 配置 cors-config.json 创建 JSON 文件
[
{
"origin": ["*"],
"method": ["GET"],
"maxAgeSeconds": 3000,
"responseHeader": ["Authorization", "Content-Range", "Accept", "Content-Type", "Origin", "Range"]
}
]
2. 将此文件上传到存储桶中
gsutil cp cors-config.json gs://[bucket_name]
3. 现在更新存储桶 cors 配置
gsutil cors set cors-config.json gs://[bucket_name]
您的 CORS 配置已更新。现在,您可以通过运行此命令在存储桶上查看最新更新的 CORS 配置。
gsutil cors get gs://[bucket_name]/
关于 CORS 配置的谷歌文档
在撰写本文时,@Yogesh Patil的回答确实解决了这个问题。
我想指出的是,我使用的是Windows Google Cloud SDK。
您无需将 json 文件上传到存储桶。但是您需要将 json 文件复制到本地 Google Cloud SDK 目录中。然后你可以运行命令:
gsutil cors set cors-config.json gs://[bucket_name]
情况似乎不再如此:
$.ajax('//ajax.googleapis.com/ajax/libs/dojo/1.8/dojox/geo/charting/resources/data/USStates.json').
then(function(data) { console.log(data) })
// {"layerExtent": …}