2011-08-06 82 views
3

我想下載一些數據使用純javascript/html從跨域,dropbox是特定的。dropbox jsonp文件

<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不起作用?

謝謝!

UPDATE:

<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> 

收益爲[對象對象]或undefined ...一些仍然是錯的? test.json的內容是myCallback({「your」:「json」});

+1

回覆:更新,你正在提醒對象。爲了提醒字符串'json','alert(dataWeGotViaJsonp.your);' – Yahel

+0

謝謝!那工作:) – ejang

回答

6

您不能只在您的URL中添加「回調」一詞,並期望Dropbox將其包裝爲JSONP。您在Dropbox上放置JSON文件並公開分享,但Dropbox不是動態服務器。您需要一個腳本化的環境才能獲取回調參數值並將其包裝在JSON中以使其成爲「JSONP」。

Twitter URL的工作原理是,它們的API被配置爲將回調參數作爲客戶端期望的JSONP的標誌,這實際上僅僅是「在回調函數中包裝的JavaScript對象文字」 。您告訴Twitter該函數將被調用,並且它們將返回一個瀏覽器將作爲腳本執行的文件,並將該對象作爲參數傳遞給您的回調函數。

如果您不需要JSONP回調函數名稱是動態的,並且您需要使用Dropbox,那麼只需自己包裝JSON即可。所有你需要做的就是編輯這個文件,並且在這個函數的名字前加上有效的JSON,並且用close paren來附加它。

myCallback( {"your":"json"} );