我正试图从不同网站上的HTML页面中的Dropbox公共文件夹中调用JSONP调用(因此我需要jsonp来避免跨站点问题)。
我的javascript代码抱怨因为它获取HTML而不是JSON。
$.ajax({
url: "https://www.dropbox.com/s/fzqhnr39fq45ijh/gen_info.json?dl=0",
jsonp: "callback",
dataType: "jsonp",
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});
如果我从firebug控制台复制确切的URL并尝试使用wget,我会得到正确的文件内容。但是,正如您所看到的,存在重定向。调试窗口的内容表明ajax正在尝试显示第一个URL的HTML而不是重定向
$wget -O try.txt 'https://www.dropbox.com/s/fzqhnr39fq45ijh/gen_info.json?dl=0&callback=jQuery31100535301754706522_1475816277772&_=1475816277773'
--2016-10-07 15:35:25-- https://www.dropbox.com/s/fzqhnr39fq45ijh/gen_info.json?dl=0&callback=jQuery31100535301754706522_1475816277772&_=1475816277773
Resolving www.dropbox.com... 108.160.172.238
Connecting to www.dropbox.com|108.160.172.238|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://dl.dropboxusercontent.com/content_link/OCqme2gZH9FE2dTWU3DATOHjkk3V7PpjPZZAp6N6hK7cztzhiRTflEh27aFDA8bK/file [following]
--2016-10-07 15:35:26-- https://dl.dropboxusercontent.com/content_link/OCqme2gZH9FE2dTWU3DATOHjkk3V7PpjPZZAp6N6hK7cztzhiRTflEh27aFDA8bK/file
Resolving dl.dropboxusercontent.com... 45.58.69.5
Connecting to dl.dropboxusercontent.com|45.58.69.5|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2698 (2.6K) [text/plain]
Saving to: `try.txt'
100%[======================================================================>] 2,698 --.-K/s in 0s
2016-10-07 15:35:28 (426 MB/s) - `try.txt' saved [2698/2698]
我已经按照dropbox jsonp file的建议预先包装了json,但是ajax调用永远不会到达那个页面。
callback( {"HALLWF1": ["2016/10/07 15:05:00", "Hallett 1 Wind Farm", "SA1", "Wind", "-33.300303", "138.726975", 77.5, 94.5] )
有没有办法强制ajax遵循Dropbox重定向,还是我应该放弃并为json选择另一个主机?浏览器是firefox 45.2.0,如果这有所不同。
还在最新的chrome中测试,错误有
Refused to execute script from 'https://www.dropbox.com/s/fzqhnr39fq45ijh/gen_info.json?dl=0&callback=jQuery311040161567467680626_1475817828807&_=1475817828808' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.
答案 0 :(得分:1)
默认情况下,这些www.dropbox.com/s/链接指向HTML预览页面,而不是文件内容本身。
您可以使用dl
或raw
参数明确控制此操作,如下所示:
https://www.dropbox.com/help/201
例如,对代码的这种轻微修改有效:
$.ajax({
url: "https://www.dropbox.com/s/fzqhnr39fq45ijh/gen_info.json?raw=1",
jsonp: "callback",
dataType: "jsonp",
// Work with the response
success: function( response ) {
console.log( response ); // server response
}
});