序列化javascript数组
我正在使用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如下
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变量id看起来像这样[“219”,“217”,“218”,“195”]
有人可以提供一些指导。
您可以使用JSON-js将任何JavaScript对象或数组序列化为JSON。
只需创建一个传递给$.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
在新浏览器中运行得更快,但前一种方法在旧浏览器中的运行速度更快。
好的,所以解决方案非常简单。 这里是。
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 instances, Model uiModel) {...Action logic goes here...}
查看action参数的@RequestParam属性