2012-02-10 51 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在新瀏覽器中運行速度更快,但前一種方法在舊版瀏覽器中運行得更快。