我正在尝试使用纯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对象或未定义...还是有什么问题吗?test.json的内容为myCallback( {"your":"json"} );
发布于 2011-08-06 11:47:28
你不能在你的URL中添加“callback”这个词,然后期望Dropbox把它包装成JSONP。你在你的Dropbox上放了一个JSON文件并公开分享,但Dropbox不是一个动态服务器。您需要一个可脚本化的环境来获取回调参数值,并将其包装在JSON中,以便使其成为"JSONP“。
Twitter URL工作的原因是他们的API被配置为接受回调参数作为客户端正在等待JSONP的标志,JSONP实际上只是“包装在回调函数中的JavaScript对象文字”的一个花哨的术语。您告诉twitter将调用哪个函数,它们将返回一个文件,浏览器将该文件作为脚本执行,并将该对象作为参数传递给您的回调函数。
如果不需要JSONP回调函数名是动态的,并且需要使用Dropbox,那么只需自己包装JSON即可。您所需要做的就是编辑该文件,在有效的JSON前面加上函数的名称,然后在后面加上close paren。
也就是说,
myCallback( {"your":"json"} );发布于 2012-10-29 21:57:52
可以使用Google Apps脚本作为不支持jsonp的托管站点的代理。这里有关于如何做到这一点的文章,http://ramblings.mcpher.com/Home/excelquirks/jsonp
https://stackoverflow.com/questions/6964598
复制相似问题