通过JQuery将JSON发布到Spring Roo控制器

时间:2012-08-09 14:40:06

标签: jquery json

我最近使用JQuery和Spring Roo遇到了一个问题。我想将数据发布到Spring Roo控制器的JSON启用URL(我认为这不是特别重要,但为了清楚起见,我把它放在那里)。我知道控制器工作正常,因为我可以通过Curl命令向它发布数据,如下所示:

curl -i -X POST -H "Content-Type:application/json" http://localhost:8080/PeopleProject/people 
     -d '{"firstName":"some","lastName":"guy","email":"some@guy.com"}

那么,我尝试用Javascript中的$ .post()调用发布数据,如下所示:

 var data = {"firstName":"some","lastName":"guy","email":"some.guy@gmail.com"};
 $.post('/PeopleProject/people', data, successfulPost ) ;

但是,我会在服务器端遇到关于无法解析输入的错误。运行调试器,我可以看到通过此Javascript发布的数据是通过URL编码发送的,而来自curl命令的数据则不是。

最后,经过多次搞乱,我尝试了这个Javascript:

 var jqxhr =
            $.ajax({
                url: "/PeopleProject/people",
                processData : true,
                contentType:"application/json",
                type : "POST",
                data: '{"firstName":"some","lastName":"guy","email":"some.guy@gmail.com"}',
            })

这很有效!但是,我不确定它为什么有效,$ .post()没有。关于Javascript / JQuery的人比我更了解这个吗?

我以为我在某个地方看到一个JSON帖子到服务器会把东西编码为名称值对,但我猜这不对,因为我已经看到curl命令发布了漂亮,干净的JSON,而$ .post()推送了一个URL编码的查询字符串。

所以我的问题是:上面的ajax()是否是将JSON数据推送到服务器的首选方法?或者,有没有办法使用$ .push()并让它工作?

2 个答案:

答案 0 :(得分:1)

$.post不支持processData作为参数。 http://api.jquery.com/jQuery.post/

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

<强>更新

processData: false告诉jquery将数据参数保留为原样(在本例中为json字符串)并将其作为请求体发送。由于$.post没有选项可以禁用processData,因此如果没有先使用$.post

,则无法使用$.ajaxSetup({processData: false, contentType: "application/json"});进行操作

答案 1 :(得分:0)

我认为答案是$ .post()会自动将数据编码为application / x-www-form-urlencoded。通过切换到$ .ajax()调用,您可以选择编码,这是我的经验所明确暗示的。谢谢大家!