Dropbox JSONP 文件

3

我正在尝试使用纯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会正确加载。我从这里得到了这个示例。

有人可以解释一下为什么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"} );


1
关于更新,你正在警报对象。要警报字符串 json,请使用 alert(dataWeGotViaJsonp.your); - Yahel
2个回答

6
你不能仅仅在URL中添加“callback”一词并期望Dropbox将其包装为JSONP。你需要在Dropbox上放置一个JSON文件并公开共享它,但Dropbox不是一个动态服务器。你需要一个可编写脚本的环境来接收回调参数值并将其包装在JSON周围以使其成为“JSONP”。
Twitter URL之所以有效是因为他们的API被配置为将回调参数视为客户端期望JSONP的标志,这实际上只是一个“包装在回调函数中的JavaScript对象文字”的花哨术语。告诉Twitter那个函数将被调用,他们将返回一个文件,浏览器将执行该文件作为脚本,并将对象作为参数传递给您的回调函数。
如果您不需要JSONP回调函数名称是动态的,并且需要使用Dropbox,则只需自己包装JSON。您需要做的就是编辑文件,并在有效的JSON前面添加函数名称,并在其后加上右括号。
例如:
myCallback(  {"your":"json"}  );

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接