2011-05-14 99 views
1

我在這裏努力弄清楚如何做一個JSONP請求,但我在尋找參考材料的地方都是jQuery示例。我可以閱讀jQuery源代碼,但我想要一個乾淨而簡單的示例。我建立了一個庫的東西,我不想包括jQuery,所以請,沒有jQuery $.getJSON。我知道如何使用它。JSONP幫助(沒有jQuery)

我的服務器用content-type: application/json; charset=utf-8 MIME吐出正常的callback({"foo":"bar"})響應。

所以,如果我把像(使用Twitter,因爲我知道他們的API作品)的腳本標籤:

<script src="http://twitter.com/users/oscargodson.json?callback=test"></script> 

或動態。要麼工作,我得到的JSON,下一步我不明白。

如果我做腳本加載我拿到後僅console.log(test)Uncaught ReferenceError: test is not defined

爲什麼?如何,當我從服務器得到響應後,然後將它傳遞給我自己?在我自己的服務器上,如果我做callback = {"foo":"bar"}回調工作並返回一個對象,但不是上述方式。怎麼來的?我只使用AJAX庫來做到這一點,但對於這個項目我需要自己編寫代碼:)

回答

3

如果你設置了「callback = test」,那麼在你的客戶端代碼中你需要有一個名爲「test」的函數從服務器獲取json值併爲您處理。

JQuery只是用動態生成的函數名來做到這一點。

function test(data) { console.log(data) } 
get_jsonp("http://www.example.com/?callback=test") 
1

一個簡單的腳本包應該做的工作:

function test(res) { 
    // TODO: manipulate the results here like for example showing 
    // the created_at property 
    alert(res.created_at);  
} 

window.onload = function() { 
    var script = document.createElement("script"); 
    script.src = 'http://twitter.com/users/oscargodson.json?callback=test'; 
    document.body.appendChild(script); 
}; 

而且這裏有一個live demo

顯然你不應該忘記,瀏覽器可能會緩存靜態資源,如腳本,所以如果你想確保新的信息,你可以調整一些時間戳到URL。