Сериализовать массив JavaScript
Я использую расширенную сетку додзё, а переменная с пометкой "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);
});
});
}
Я не уверен, как должна выглядеть строка для сериализованного массива, поскольку я могу динамически построить любую строку. Я пытаюсь использовать метод get jquery, как показано в примере
$.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" как длинный и, конечно, результат NumberFormatException. Переменная id javascript выглядит следующим образом ["219","217","218","195"]
Может кто-нибудь, пожалуйста, предложить некоторые рекомендации.
3 ответа
Итак, решение было очень очень простым. Вот.
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);
});
});
}
Посмотрите запрос на получение {"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...}
Посмотрите на свойство @RequestParam аргументов действия
Вы можете использовать JSON-js для сериализации любого объекта JavaScript или массива в JSON.
Просто создайте массив идентификаторов, которые вы передаете $.get()
метод:
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
работает быстрее в новых браузерах, но прежний метод работает быстрее в старых браузерах.