6

?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 でこれを実行しようとすると、params に入ります!!!

次の 2 つの質問を読んだ後: jQuery を使用して POST-body を JSON オブジェクトに設定する

リクエストボディに有効なjsonを投稿するjQuery

.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 を使用しました。なんて怠け者だ。

4

2 に答える 2

9

私は数日前にあなたと同じ問題を抱えています。

私にとっての解決策はjQuery.ajaxSetup、ajax コンテンツ タイプのデフォルト値を設定するために使用することでした。

$(function() {
    $.ajaxSetup({
        contentType: "application/json; charset=utf-8"
    });
}

これを使用すると、JSON をコントローラーに転送し$.ajaxたり、次のように使用したりできます。$.post

def yourJSON = request.JSON

$.ajaxテスト中に「contentType」オプション$.postが無視された理由がわかりません。

于 2012-09-06T20:29:16.103 に答える
4

同様の問題もありましたが、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);
  }
});
于 2013-06-11T15:51:02.507 に答える