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数据