Grails:request.JSON来自哪里,我如何用jQuery的.ajax()或.post()来处理它?
我有一个控制器,在请求体中需要一些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做到这一点时它会进入params !!!
阅读了这两个问题: 使用jQuery将POST主体设置为JSON对象
jQuery在请求体中发布有效的json
我对如何编写.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做错了。
更新:看起来这个白痴实际上遇到了同样的问题: 如何在grails 2.0中获得JSON,但他没有遇到jQuery问题,而是使用了cURL和reqeust.JSON。 多么懒惰的家伙。
我几天前和你一样有同样的麻烦。
对我来说 – 解决方案是使用jQuery.ajaxSetup
来设置ajax内容类型的默认值。
$(function() { $.ajaxSetup({ contentType: "application/json; charset=utf-8" }); }
有了这个,您可以使用$.ajax
或$.post
将您的JSON传输到控制器并使用它:
def yourJSON = request.JSON
我不知道为什么$.ajax
和$.post
的’contentType’选项在我的测试中被忽略了。
有一个类似的问题,但不需要使用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); } });