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
}  

我将做更多的事情,但能够以这种方式访问​​数据会很好。我正在使用 Grails 2.1 和 Jquery 1.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。

我找到了一个 `serializeJSON' 函数,它可能会替换 serializeArray() 以将其格式化为 JSON。以下内容由 Arjen Oosterkamp 在jQuery serializeArray页面上提供:

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

只需用作 $('form').serializeJSON();

该功能的所有功劳都归功于 Arjen Oosterkamp ......

于 2012-07-14T03:55:41.677 回答