2011-01-13 165 views
10

我正在製作一個需要以JSONP格式返回數據的Web服務。我使用JSP的JSON taglib,我認爲所有必須添加的都是括號,但我找不到驗證這一點的好資源。發送JSONP與JSON數據?

例如,使用該函數曾經Web服務功能的回報:

private static String getJSONPObject(String s) throws JSONException { 
    return "(" + new JSONObject(s) + ")"; 
} 

這是正確的嗎?

謝謝!

回答

22

JSONP只是一個黑客,允許網絡應用程序跨域檢索數據。可以說它違反了Same Origin Policy (SOP)。它的工作方式是使用Javascript在頁面中插入「腳本」元素。因此,你需要一個回調函數。如果你沒有,你的Javascript將無法訪問JSON對象。但通過使用JSONP,您的Javascript代碼可以調用回調函數。

所以你必須指定回調名稱。所以你的功能可能是這樣的:

private static String getJSONPObject(String callback, String s) throws JSONException { 
    return callback + "(" + new JSONObject(s) + ")"; 
} 
+2

你應該有訪問HTTP請求對象或至少部分訪問其發送的回調,通常這種形式的方式:http://example.com?callback=name123 – 2011-01-13 17:35:18