2010-07-02 138 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

相关问题