我最近在使用 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() 并让它工作?