0

我正在使用 dojo 增强网格,标记为“myGrid”的变量指的是网格。

function addtocart() {
        $("#additem").click(function(){
            var myGrid = dojo.byId(dataGrid);
            var ids = [];
            var gridRow = myGrid.selection.getSelected();
            $.each( gridRow, function(i, l){
                ids.push(l.id);
            });
            var registcarturl = "${carturl}" + $("#regCart :selected").val();
            $.get(registcarturl, {instanceIds: ids}, function(data) {
                alert(data);
            });
        });
    }

我不确定序列化数组的字符串应该是什么样子,因为我可以动态构建任何字符串。我正在尝试使用 jquery get 方法,如示例中所示

$.get("test.cgi", { name: "John", time: "2pm" },   function(data){     alert("Data Loaded: " + data);   });

我修改了函数如下

    function addtocart() {
        $("#additem").click(function(){
            var myGrid = dojo.byId(dataGrid);
            var ids = "[";
            var gridRow = myGrid.selection.getSelected();
            $.each( gridRow, function(i, l){
                ids = ids + "\"" +l.id +"\"";

                if(i != (gridRow.length -1)){
                    ids = ids + ",";
                };

            });
            ids = ids + "]";
            alert(ids);
            var registcarturl = "${carturl}" + $("#regCart :selected").val();
            $.get(registcarturl, {instanceIds: ids}, function(data) {
                alert(data);
            });
        });
    }

当我的数据到达我的 java 控制器时,它会尝试将["219"解析为 long,当然会产生 NumberFormatException 结果。javascript 变量ids看起来像这样["219","217","218","195"]

有人可以提供一些指导。

4

3 回答 3

0

您可以使用JSON-js将任何 JavaScript 对象或数组序列化为 JSON。

于 2012-02-10T19:09:40.720 回答
0

只需创建一个传递给$.get()方法的 ID 数组:

function addtocart() {
    $("#additem").click(function(){
        var myGrid = dojo.byId(dataGrid);
        var ids = [];
        var gridRow = myGrid.selection.getSelected();
        $.each( gridRow, function(i, l){
            ids[ids.length] = l.id;
        });
        alert(ids);
        var registcarturl = "${carturl}" + $("#regCart :selected").val();
        $.get(registcarturl, {instanceIds: ids}, function(data) {
            alert(data);
        });
    });
}

请注意,将另一个索引推送到我使用的数组上,ids[ids.length]而不是.push. .push在新浏览器中运行速度更快,但前一种方法在旧浏览器中运行速度更快。

于 2012-02-10T19:09:46.573 回答
0

好的,所以解决方案非常简单。这里是。

    function addtocart() {
        $("#additem").click(function(){
            var myGrid = dojo.byId(dataGrid);
            var ids = [];
            var gridRow = myGrid.selection.getSelected();
            $.each( gridRow, function(i, l){
                ids[i] = l.id;
            });
            var registcarturl = "${carturl}" + $("#regCart :selected").val();
            $.get(registcarturl, {"modinstid[]": ids}, function(data) {
                alert(data);
            });
        });
    }

查看get请求{"modinstid[]": ids}和对应的spring MVC控制器如下。

@RequestMapping(value = "addtocart/{cart}", method = RequestMethod.GET) public @ResponseBody
String addtocart(@PathVariable("cart") Long cart, @RequestParam("modinstid[]") ArrayList<String> instances, Model uiModel) {...Action logic goes here...}

查看动作参数的@RequestParam属性

于 2012-02-14T13:14:14.457 回答