【问题标题】:JSON formatting (Sending JSON via jQuery AJAX post to Java/Wicket server)JSON 格式(通过 jQuery AJAX 发送 JSON 到 Java/Wicket 服务器)
【发布时间】:2011-03-11 06:00:53
【问题描述】:

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

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

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

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

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

显然,我可以轻松获取名称和描述的值,但我的项目数组的键被搞砸了。我确信这很简单,但我似乎一直在寻找解决方案。有什么建议?谢谢!

【问题讨论】:

标签: java jquery ajax json wicket


【解决方案1】:

你必须使用 JSON.stringify:

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

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

编辑:'post' 的键应该是类型,而不是方法。

【讨论】:

  • 当你将dataType指定为json时,jQuery会自动添加内容类型为application/json,不是吗?不过,我确实需要对我的 JSON 进行字符串化,这解决了我的问题。谢谢你抓住它!此外,如果您希望您的数据作为参数值而不是键返回,请按以下方式发送:data: {'lookup': JSON.stringify(lookup)}
  • @Jared,不。 dataType 指定您希望服务器发送的内容。 contentType你正在发送的内容类型,jQuery 不会根据 dataType 改变它。而{'lookup': JSON.stringify(lookup)} 并不完全正确。如果查找是{foo: "bar"},它将被url编码为lookup=%7B%22foo%22%3A%22bar%22%7D之类的东西,这显然不是一个有效的JSON文档。当您发布应用程序/json 时,您不使用 url 编码。我认为这可能与您输入method: 'post' 有关。它应该是类型:'post'。方法被忽略,默认是GET。
  • 注意:如果您收到“JSON 未定义”错误 (IE6/7),您需要在页面中包含 json.org 的最新 json.js 文件。
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2016-07-17
相关资源
最近更新 更多