Grails:request.JSON 是从哪里来的,我如何用 jQuery 的 .ajax() 或 .post() 把东西放在那里?
Posted
技术标签:
【中文标题】Grails:request.JSON 是从哪里来的,我如何用 jQuery 的 .ajax() 或 .post() 把东西放在那里?【英文标题】:Grails: where does request.JSON come from, and how do I put things there with jQuery's .ajax() or .post()? 【发布时间】:2012-08-31 17:26:24 【问题描述】:我有一个控制器,它在 ?request body? 中获取一些 json 并用它做一些很棒的事情:
def myController()
def myAction()
println "Here is request.JSON: $request.JSON as JSON"
println "Here is params: $params"
//do awesome stuff with request.JSON only
return
所以我可以像这样用 cURL 打这个:
curl -i -H "content-type: application/json" -d "\"someVariable\":\"Absolutely\""
我的 grails 控制器打印:
Here is request.JSON: "someVariable":"Absolutely"
Here is params: [controller:'myController', action:'myAction']
到目前为止一切都很好,但是当我尝试使用 jQuery 执行此操作时,它进入了参数!!!
阅读了这两个问题: Setting the POST-body to a JSON object with jQuery
jQuery posting valid json in request body
我对如何编写 .js 的最佳猜测是:
var sendMe = "someVariable":"Absolutely"
$.ajax(
url: '/myController/myAction',
type: 'POST',
processData: false,
data: JSON.stringify(sendMe),
dataType: 'json',
success: function(data)
,
error: function(request, status, error)
);
但是当我这样做时,我的控制器会打印:
Here is request.JSON:
Here is params: ["someVariable":"Absolutely":, controller:'myController', action:'myAction']
我一定是用 jQuery 做错了。
更新:看起来这个白痴实际上遇到了同样的问题:How to get at JSON in grails 2.0 但他没有遇到 jQuery 问题,而是使用了 cURL 和 reqeust.JSON 的东西。真是个懒惰的家伙。
【问题讨论】:
【参考方案1】:前几天我也遇到了和你一样的烦恼。
对我来说 - 解决方案是使用 jQuery.ajaxSetup
设置 ajax 内容类型的默认值。
$(function()
$.ajaxSetup(
contentType: "application/json; charset=utf-8"
);
有了这个,您可以使用$.ajax
或$.post
将您的 JSON 传输到控制器并像这样使用它:
def yourJSON = request.JSON
我不知道为什么$.ajax
和$.post
中的“contentType”选项在我的测试中被忽略了。
【讨论】:
【参考方案2】:也有类似的问题,但不需要使用ajaxSetup,只需要设置contentType:
$.ajax(
method: "POST",
url: "/api/bar"
data: JSON.stringify(a:true),
contentType:"application/json; charset=utf-8",
dataType: "json",
success: function()
console.log("args: %o", arguments);
);
【讨论】:
更好的答案 imo以上是关于Grails:request.JSON 是从哪里来的,我如何用 jQuery 的 .ajax() 或 .post() 把东西放在那里?的主要内容,如果未能解决你的问题,请参考以下文章
这个 backBarButtonItem 又是从哪里来的呢?
这些 .htaccess 规则是从哪里来的,它们到底是做啥的?