2012-02-10 58 views
0

我正在使用dojo增强型网格,标记为“myGrid”的变量是指网格。序列化javascript数组

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”]

是否有人可以提供一些指导。

+0

尝试在阵列中去除周围的号码引号@RequestParam财产。 Java在期待数字时发送字符串。 – 2012-02-10 19:10:43

回答

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}和相应的弹簧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...} 

看的动作参数

0

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

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在新浏览器中运行速度更快,但前一种方法在旧版浏览器中运行得更快。