2012-03-08 96 views
0

我設置了一個跨域的web服務,需要通過json與填充 聯繫,在這樣一個簡單的jQuery代碼行上,我成功取回了json數據。JSONP函數調用問題

$.getJSON("http://server/series/hist?jsonp=?", function(data){ 
console.log(data); 
}); 

webservice會將結果封裝在函數中,只要「url」中存在「jsonp」。 對於那些情況下,我使用默認的功能名稱,如:

myfunction({"a":1}) 

jQuery的幫助我在這裏,並改掉調用功能,即心不是現有的(「myfunction的()」)。我想實現的是一個簡單的回調函數調用(參見上文),以在本地處理數據。

你能指點我正確的方向嗎?

謝謝

回答

3

我不太清楚你的問題實際上是,但是:

解讀1

假設由「本地」你的意思是「不使用回調」 :

這是不可能的。 JSON-P 不能同步工作,因爲它取決於添加一個<script>元素(在當前函數完成執行之前不會被處理)。

解讀2

假設由that isnt existing ("myfunction()")你的意思是「你的web服務總是使用功能名稱myfunction

修正web服務jsonp=?的意思是」隨機生成一個函數名,並將其傳遞的jsonp參數。

webservice必須使用該參數來確定所使用的函數名稱,而不是使用固定值,如myfunction

解讀3

你不想使用JSON-P作爲輸入,而是直接調用您的匿名函數。

你不能。它不存儲在任何你可以訪問它的地方。你必須重寫代碼,因此不直接傳遞給getJSON

function myFunction(data){ 
    console.log(data); 
} 

$.getJSON("http://server/series/hist?jsonp=?", myfunction); 
myfunction({"a":1}) 
+0

深受當地我的意思上面我的代碼的回調函數: 功能(數據){執行console.log(數據);} 因爲它是在每個JSON示例中提到的 – zbug 2012-03-08 12:53:20

+0

我剛剛閱讀了您的編輯Interpretation2。如果我理解你的話,jquery會隨機爲「?」生成一個名稱。所以web服務必須抓住它並將其包裝在json結果中才能使回調函數正常工作? – zbug 2012-03-08 12:57:30

+0

@zbug - 是的。你不能每次都使用同一個名字,你會遇到衝突。 – Quentin 2012-03-08 13:07:27