1

複数のレベルを持つ必要があるajax関数からコントローラーにデータを送信しようとしているので、次のようになります。

{
  "lob": {
    "TESTING": [
      {
        "name": "color",
        "value": "1"
      },
      {
        "name": "time",
        "value": "2"
      },
      {
        "name": "jeremy",
        "value": "3"
      },
      {
        "name": "fourtytwo",
        "value": "4"
      },
      {
        "name": "owl",
        "value": "5"
      },
      {
        "name": "why",
        "value": "6"
      },
      {
        "name": "derp",
        "value": "7"
      },
      {
        "name": "where",
        "value": "8"
      }
    ]
  }
}

しかし、それがgrailsに送信されるとき、パラメータを出力するときにこれを取得しています

[lob[TESTING][4][value]:5,
 lob[TESTING][3][name]:fourtytwo,
 lob[TESTING][6][name]:derp,
 lob[TESTING][5][name]:why,
 lob[TESTING][3][value]:4,
 lob[TESTING][1][value]:2,
 lob[TESTING][2][value]:3,
 lob[TESTING][5][value]:6,
 lob[TESTING][1][name]:time,
 lob[TESTING][0][value]:1,
 lob[TESTING][6][value]:7,
 lob[TESTING][0][name]:color,
 lob[TESTING][7][value]:8,
 lob[TESTING][4][name]:owl,
 lob[TESTING][7][name]:where,
 lob[TESTING][2][name]:jeremy,
 action:save,
 controller:LOB]

JavaScriptから送信しているデータ:

{
    lob: {
        TESTING: $form.serializeArray()
    }
}

JSON.parseまたはrequest.JSONを使用すると言っている複数のフォーラムを読んでいますが、これらのソリューションは私の問題を修正していないようです。次のようなデータにアクセスできるようにしたい

params.lob.testing.each{ a->
    println a
}  

それ以上のことをやっていきますが、そういう形でデータにアクセスできたらいいなと思います。Grails2.1とJquery1.7.2を使用しています

4

1 に答える 1

4

実際、Grailsはそれを非常に簡単にします。私はあなたのテストデータを取り、それを以下に実行しました:

import grails.converters.JSON

class LobController {

    def save = {
       def json = request.JSON
       json.lob.TESTING.each {item->
         println "Name: ${item.name} - Value: ${item.value}"
       }
      //render something back if you need to here
  }
}

そしてそれは出力します:

Name color - Value: 1
Name time - Value: 2
Name jeremy - Value: 3
Name fourtytwo - Value: 4
Name owl - Value: 5
Name why - Value: 6
Name derp - Value: 7
Name where - Value: 8

私はこのようなUrlMappingエントリを作成しました(おそらくすでにこれを持っています):

"/myApi"(controller: "lob", parseRequest: true) {
            action = [POST: "save"]
}

parseRequest: true着信JSONを自動的に解析します。

これをJSON用にフォーマットするためにserializeArray()を置き換える可能性のある`serializeJSON'関数を見つけました。以下は、 jQueryserializeArrayページでArjenOosterkampによって提供されました。

(function( $ ){
$.fn.serializeJSON=function() {
var json = {};
jQuery.map($(this).serializeArray(), function(n, i){
json[n['name']] = n['value'];
});
return json;
};
})( jQuery );

単に$('form')。serializeJSON();として使用します。

その機能のすべてのクレジットはArjenOosterkampに送られます...

于 2012-07-14T03:55:41.677 に答える