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

Posted

技术标签:

【中文标题】JSON 格式(通过 jQuery AJAX 发送 JSON 到 Java/Wicket 服务器)【英文标题】:JSON formatting (Sending JSON via jQuery AJAX post to Java/Wicket server) 【发布时间】: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],

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

【问题讨论】:

嗨,您能否发布您的 Wicket AjaxBehavior 代码。我有一个问题(***.com/questions/4976244/…),因为我的 onRequest() 似乎没有收到任何数据。谢谢 【参考方案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 文件。

以上是关于JSON 格式(通过 jQuery AJAX 发送 JSON 到 Java/Wicket 服务器)的主要内容,如果未能解决你的问题,请参考以下文章

jQuery通过Ajax向PHP服务端发送请求并返回JSON数据

js jquery中的$.ajax中的data属性需要用json格式向后台发送数据

通过表单与 jquery/ajax 发送 json

通过 jQuery Ajax 发送 Json 数组

jQuery-Ajax

jQuery-Ajax