2011-08-06 6 views
3

도메인 간 dropbox에서 순수한 javascript/html을 사용하여 데이터를 다운로드하려고합니다. 어떤 이유로 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> 

반환 [개체 개체] 하나 또는 정의되지 않은 ... 여전히 뭔가 잘못? test.json의 내용은 myCallback ({ "your": "json"})입니다.

+1

Re : 업데이트, 당신은 객체에 경고하고 있습니다. 'json'이라는 문자열에 경고하기 위해,'alert (dataWeGotViaJsonp.your);' – Yahel

+0

감사합니다! 그 :) – ejang

답변

6

'콜백'이라는 단어를 URL에 추가하고 Dropbox가 JSONP 용으로 감쌀 것을 기대할 수는 없습니다. Dropbox에 JSON 파일을 넣고 공개적으로 공유하지만 Dropbox는 동적 서버가 아닙니다. 콜백 매개 변수 값을 가져 와서 JSON 주위에 랩핑하여 "JSONP"이되게하려면 스크립팅 가능한 환경이 필요합니다.

트위터 URL이 작동하는 이유는 API가 클라이언트가 JSONP를 기다리고 있다는 표시로 콜백 매개 변수를 사용하도록 구성 되었기 때문입니다. 실제로 이는 "콜백 함수에 래핑 된 JavaScript 개체 리터럴" . 당신은 트위터에 그 함수가 무엇을 부를 것인지를 알려주고, 브라우저가 스크립트로 실행할 파일을 반환하여 객체를 콜백 함수의 매개 변수로 전달합니다.

JSONP 콜백 함수 이름이 동적 일 필요가 없으며 Dropbox를 사용해야하는 경우 JSON을 직접 포장하십시오. 파일을 편집하고 유효한 JSON 앞에 함수 이름을 추가하고 닫기 괄호를 추가하면됩니다.

즉,

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