2010-03-23 128 views
6

我明白什麼 JSON/JSONP,但我不是一個程序員,不知道如何提取簡單的用法的基本知識。我已經閱讀了很多關於JSONP和JSONP各種用法的例子,但是我還沒有找到一個簡單的例子來從其他頁面檢索文本(例如http://www.domain.com/external/text.aspx)。JSONP如何檢索文本

有人請舉一個jQuery/JSONP設置爲檢索文本到div的例子嗎? 我會認爲這是JSONP的一個非常基本的用法。

回答

13

首先,瞭解JSONP的工作原理非常重要,服務器必須知道它將與JSONP請求聯繫。換句話說,如果服務器準備不當,你不能僅僅向一些隨機服務器發出請求,並期望它能夠正常工作。

如果您確實知道具有旨在接受和響應JSONP請求的URL的服務器,那麼返回給您的是一個包含在對函數的調用中的JSON表達式。您的頁面將包含該函數,因此當結果從服務器返回時,瀏覽器將解釋JSON表達式,然後調用該函數。

因此,如果你想返回文本的一個很好的塊中的服務,你會調用這樣的服務:

$.getJSON("http://www.domain.com/external/text.aspx?callback=", function(data) { 
    $('#targetDiv').text(data.text); 
}); 

jQuery代碼將做好一切準備,以使服務器將被告知(通過HTTP請求中的一個名爲「jsonp」的參數)調用函數的名稱(並且jQuery本身將爲您構建該函數)。服務器應迴應這樣的事情:

jqueryFunctionName({text: "This is a nice block of text."}) 
+0

非常感謝你給一個直接的例子。我將在此推薦你作爲諾貝爾教育學獎的最佳人選。你也可以用蛋糕......或其他東西來對待自己。 有一件事,只是爲了安全起見: 我把你的代碼放在HTML分隔代碼正下方的標籤之間。此外,我還有一個鏈接,將標記鏈接到jquery-1.4.2.min.js。是對的嗎?如果是這樣,它不起作用,這意味着服務器沒有設置爲JSONP。對? 我可能在這裏推動了極限,但是您是否也可以舉例說明如何通過代理檢索文本?真的很感激它。 – Nano 2010-03-23 14:35:49

+0

是的是的 - 抱歉,我沒有試圖提供完整的代碼頁面。是的,你的jQuery調用來獲取JSON的東西將在腳本標籤內,並且可能在某種事件的處理器內部 - 也許是對「點擊」或其他東西的響應。至於代理 - 假設你的意思是一個HTTP代理 - 那麼根本就不應該有什麼特別的;如果您可以從瀏覽器訪問服務器以獲得正常的URL,那麼您應該沒有問題。關於JSON內容的HTTP請求沒有什麼「奇怪的」。 – Pointy 2010-03-23 17:40:16

+0

我是否必須創建JSON文件? – Nano 2010-03-23 19:58:16