我正在尝试使用纯 javascript/html 从跨域下载一些数据,具体来说是 dropbox。
<html>
<head>
</head>
<body>
<div id = 'twitterFeed'></div>
<script>
function myCallback(dataWeGotViaJsonp){
var text = '';
var len = dataWeGotViaJsonp.length;
for(var i=0;i<len;i++){
twitterEntry = dataWeGotViaJsonp[i];
text += '<p><img src = "' + twitterEntry.user.profile_image_url_https +'"/>' + twitterEntry['text'] + '</p>'
}
document.getElementById('twitterFeed').innerHTML = text;
}
</script>
<script type="text/javascript" src="http://dl.dropbox.com/u/6438697/padraicb.json?count=10&callback=myCallback"></script>
</body>
出于某种原因,json 未加载。但是,当我改用 url“http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=myCallback”时,json 会正确加载。我从 here 得到这个例子
有人可以解释为什么 dropbox 不起作用吗?
谢谢!
更新:
<script type=text/javascript>
function myCallback(dataWeGotViaJsonp){
alert(dataWeGotViaJsonp);
}
</script>
<script type="text/javascript" src="http://dl.dropbox.com/u/6438697/test2?&callback=myCallback"></script>
返回 [object object] 或 undefined... 还是有问题? test.json 的内容是 myCallback( {"your":"json"} );
最佳答案
您不能只将“回调”一词添加到您的 URL 并期望 Dropbox 将其包装为 JSONP。您将 JSON 文件放在 Dropbox 上并公开共享,但 Dropbox 不是动态服务器。您需要一个可编写脚本的环境来获取回调参数值并将其包装在 JSON 周围以使其成为“JSONP”。
Twitter URL 起作用的原因是他们的 API 配置为将回调参数作为客户端期望 JSONP 的标志,这实际上只是“包装在回调函数中的 JavaScript 对象文字”的奇特术语。您告诉 Twitter 该函数将被调用什么,他们将返回一个文件,浏览器将作为脚本执行该文件,并将该对象作为参数传递给您的回调函数。
如果您不需要动态的 JSONP 回调函数名称并且您需要使用 Dropbox,只需自己包装 JSON。您需要做的就是编辑文件,在有效的 JSON 前面加上函数名称,并在其后附加右括号。
即,
myCallback( {"your":"json"} );
关于javascript - 保管箱 jsonp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6964598/