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 规则是从哪里来的,它们到底是做啥的?

这个 VSCODE 智能感知是从哪里来的?

Monogame Android 中的这些边界是从哪里来的?

人类的创造力是从哪里来的:4星|《三联生活周刊》2018年第46期