保管箱 jsonp 文件
Posted
技术标签:
【中文标题】保管箱 jsonp 文件【英文标题】:dropbox jsonp file 【发布时间】:2011-10-21 07:57:38 【问题描述】:我正在尝试使用纯 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 没有加载。但是,当我将网址设为“http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=myCallback”时,json 会正确加载。我从here得到这个例子
谁能解释为什么保管箱不起作用?
谢谢!
更新:
<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" );
【问题讨论】:
回复:更新,您正在提醒对象。提醒字符串json
,alert(dataWeGotViaJsonp.your);
【参考方案1】:
您不能只将“回调”一词添加到您的 URL 并期望 Dropbox 将其包装为 JSONP。您将 JSON 文件放在 Dropbox 上并公开共享,但 Dropbox 不是动态服务器。您需要一个可编写脚本的环境来获取回调参数值并将其包装在 JSON 周围,以使其成为“JSONP”。
Twitter URL 工作的原因是他们的 API 被配置为将回调参数作为客户端期待 JSONP 的标志,这实际上只是“包装在回调函数中的 JavaScript 对象文字”的一个花哨术语。你告诉 twitter 那个函数将被调用,他们会返回一个文件,浏览器将作为脚本执行,将对象作为参数传递给你的回调函数。
如果您不需要 JSONP 回调函数名称是动态的并且您需要使用 Dropbox,则只需自己包装 JSON。您需要做的就是编辑文件,在有效的 JSON 前面加上函数的名称,并在其后面加上右括号。
即,
myCallback( "your":"json" );
【讨论】:
【参考方案2】:可以将 Google Apps 脚本用作托管不支持 jsonp 的网站的代理。这里有关于如何做到这一点的文章http://ramblings.mcpher.com/Home/excelquirks/jsonp
【讨论】:
以上是关于保管箱 jsonp 文件的主要内容,如果未能解决你的问题,请参考以下文章