2010-07-02 214 views
15

我使用jQuery將JSON發佈到Java服務器,但我認爲我的JSON必須是錯誤的。這是我的數據的一個例子,以及如何我送它:JSON格式(通過jQuery AJAX發送JSON到Java/Wicket服務器)

var lookup = { 
    'name': name, 
    'description': description, 
    'items': [{ 
     'name': itemName, 
     'value': itemValue 
    }] 
} 

$.ajax({ 
    type: 'post', 
    data: lookup, 
    dataType: 'json' 
}); 

我使用Wicket的AbstractAjaxBehavior接收數據,並希望得到一個JSON字符串,我可以解析。當我得到一個地圖的參數傳遞,鍵集是這樣的:

items[0][name], 
description, 
name, 
items[0][value], 

很顯然,我可以很容易地得到的值名稱和描述,但對於我的項目的陣列的關鍵是搞砸了。我相信這很簡單,但我似乎仍然圍繞解決方案運行。有什麼建議麼?謝謝!

+0

你好你可以發佈你的Wicket AjaxBehavior的代碼。我有一個問題(http://stackoverflow.com/questions/4976244/using-wicket-abstractajaxbehavior-with-jquery-ajax),因爲我的onRequest()似乎沒有收到任何數據。謝謝 – user193116 2011-02-12 14:48:27

回答

44

你必須使用JSON.stringify:

$.ajax({ 
    type: 'post', 
    data: JSON.stringify(lookup), 
    contentType: 'application/json', 
    dataType: 'json' 
}); 

你也應該指定 '應用/ JSON' 它們將contentType。默認情況下,jQuery將使用application/x-www-form-urlencoded序列化對象(即使contentType是application/json)。所以你必須手動完成。

編輯:'帖子'的鍵應該是類型,而不是方法。

+1

當你指定dataType爲json時,jQuery會自動將內容類型添加爲application/json,不是嗎?不過,我確實需要將我的JSON串聯起來,這解決了我的問題。感謝您的支持!另外,如果你想讓你的數據返回一個參數值而不是一個鍵,可以這樣發送:'data:{'lookup':JSON.stringify(lookup)}' – Jared 2010-07-06 13:39:48

+5

@Jared,no。 'dataType'指定你期望服務器發送的內容。 'contentType'是你發送的內容類型,jQuery不會根據dataType改變它。而'{'lookup':JSON.stringify(lookup)}'不太正確。如果查找是'{foo:'bar'}',那麼將會被url編碼爲'lookup =%7B%22foo%22%3A%22bar%22%7D'這顯然不是有效的JSON文檔。當你發佈application/json時,你不使用url編碼。我認爲這可能與你把'method:'post''連接起來。它應該是type:'post'。方法被忽略,並且默認爲GET。 – 2010-07-07 00:55:39

+0

啊,優秀的解釋!謝謝! – Jared 2010-07-10 15:44:58

相關問題