JSON格式化(通过jQuery AJAX发送JSON发布到Java/Wicket服务器)

Jar*_*red 15 java ajax jquery json wicket

我正在使用jQuery将JSON发布到Java服务器,但我认为我的JSON一定是错的.这是我的数据示例以及我如何发送它:

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

$.ajax({
    type: 'post',
    data: lookup,
    dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

我正在使用Wicket的AbstractAjaxBehavior来接收数据,并希望得到一个我可以解析的JSON字符串.当我得到传递参数的Map时,键集如下所示:

items[0][name],
description,
name,
items[0][value],
Run Code Online (Sandbox Code Playgroud)

显然我可以很容易地获取名称和描述的值,但是我的项目数组的关键字搞砸了.我确信它很简单,但我似乎一直在解决这个问题.有什么建议?谢谢!

Mat*_*hen 46

你必须使用JSON.stringify:

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

您还应该将'application/json'指定为contentType.默认情况下,jQuery将使用application/x-www-form-urlencoded序列化对象(即使contentType是application/json').所以你必须手动完成.

编辑:'post'的键应该是type,而不是method.

  • @Jared,不.`dataType`指定您希望服务器发送的内容.`contentType`是你发送的内容类型*,jQuery不会根据dataType改变它.并且`{'lookup':JSON.stringify(lookup)}`不太正确.如果查找是`{foo:"bar"}`,那将被url编码为类似`lookup =%7B%22foo%22%3A%22bar%22%7D`这显然不是有效的JSON文档.当您发布application/json时,不使用url-encoding.我认为这可能与你把`method:'post'`联系起来.它应该是类型:'post'.方法被忽略,默认为GET. (5认同)
  • 注意:如果您收到"JSON未定义"错误(IE6/7),则需要在页面中包含json.org的最新json.js文件. (2认同)