Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ajax将浏览器中的javascript中的数组数据传递给spring mvc控制器_Javascript_Jquery_Ajax_Arrays_Spring Mvc - Fatal编程技术网

使用ajax将浏览器中的javascript中的数组数据传递给spring mvc控制器

使用ajax将浏览器中的javascript中的数组数据传递给spring mvc控制器,javascript,jquery,ajax,arrays,spring-mvc,Javascript,Jquery,Ajax,Arrays,Spring Mvc,我想使用AJAX将一个数组从web浏览器中的javascript传递到SpringMVC控制器 在javascript中,我有 var a = []; a[0] = 1; a[1] = 2; a[2] = 3; // how about multiple arrays as well? $.ajax({ type : "POST", url : "/myurl", data : //not sure how to write this, ("a="+a), ?

我想使用AJAX将一个数组从web浏览器中的javascript传递到SpringMVC控制器

在javascript中,我有

var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;

// how about multiple arrays as well?

$.ajax({
    type : "POST",
    url : "/myurl",
    data : //not sure how to write this, ("a="+a), ?
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
在Java中,我想创建一个类来接收来自AJAX的数据,并创建一个类来接收数据

package com.amazon.infratool.ui;

import lombok.Getter;
import lombok.Setter;


@Setter @Getter
public class RepairInfomationParameters {
//how to write this variable?
    List<String> a = null; // is it something like this?
}
package com.amazon.infratool.ui;
进口龙目吸气剂;
进口龙目织机;
@Setter@Getter
公共类RepairInformationParameters{
//如何写这个变量?
List a=null;//是这样的吗?
}

正确的方法是什么?谢谢

您可以从JavaScript端执行此操作:

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
$.ajax({
    type : "POST",
    url : "/myurl",
    data : {            
        myData: {
           "firstArray": firstArray,
           "secondArray": secondArray,
           "thirdArray": thirdArray
        }            
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
然后在Java端(在Spring 3中),假设此方法由
/myurl
映射:

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ....
}
我相信以下措施也会奏效:

public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
    ....
}
在Java端,可以使用
@modeldattribute
进行绑定:

public String controllerMethod(@ModelAttribute(value="myData") MyData myData) throws ParseException {
    ....
}
编辑


@RequestParam
注释更改为使用
myArray[]
,而不是仅使用
myArray
,因为此更改似乎是在首次发布此答案后于春季进行的。

我最终完成了此操作,并且效果良好

在js中

var a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;


$.ajax({
    type : "POST",
    url : "/myurl",
    data : "a="+a,  //multiple array, just add something like "&b="+b ...
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 
java端,使用lombok获取接收数据的类

@Setter@Getter 公共类MyData{ 专用阵列列表a;
}

然后在控制器中

@RequestMapping(value = "/repair_info", method = RequestMethod.POST)
public ModelAndView myControl(MyData myData) {
    // get data with myData object
}

将这些数据传递给SpringMVC控制器非常简单,因为您知道数据是从字符串解析的。因此,如果要在控制器中获取数组/列表,请传递该数组的字符串化版本:

public String method(
        @RequestParam(value = "stringParam") String stringParam,
        @RequestParam(value = "arrayParam") List<String> arrayParam) {
    ...
}
注意:参数类型

List<String> arrayParam

除非使用
myArray[]

public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ...
}

如果您使用的是SpringMVC4,那么下面的方法将是最好的方法

Jquery代码


var dataArrayToSend=[];
dataArrayToSend.push(“a”);
dataArrayToSend.push(“b”);
dataArrayToSend.push(“c”)

//ajax代码


$.ajax({
contentType:“应用程序/json”,
类型:“POST”,
数据:JSON.stringify(dataArrayToSend),
url:“/appUrl”,
成功:功能(数据){
console.log('done');
},
错误:函数(jqXHR、textStatus、errorshown){
log('post时出错');
}
});

弹簧控制器代码


@RequestMapping(value=“/appUrl”,method=RequestMethod.POST)
公共@ResponseBody
void yourMethod(@RequestBody String[]dataArrayToSend){
for(字符串数据:dataArrayToSend){
System.out.println(“您的数据=>”+数据);
}
}

检查这个是否对你有帮助

干杯

完全测试的溶液

$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

@RequestMapping(value = "/save/", method = RequestMethod.POST)
    public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
        System.out.println("My Array"+myArray.get(0));
        return "";
    }
$.ajax({
类型:“POST”,
url:“/myurl”,
数据:{
myArray:a//注意,“myArray”与@RequestParam的值匹配
//在Java方面
},
成功:功能(响应){
//做点什么。。。
},
错误:函数(e){
警报('错误:'+e);
}
}); 
@RequestMapping(value=“/save/”,method=RequestMethod.POST)
公共字符串控制器方法(@RequestParam(value=“myArray[]”)列表myArray){
System.out.println(“我的数组”+myArray.get(0));
返回“”;
}

谢谢@vivin,多个阵列怎么样?数据:{myArray:a,myArray2:b,…}?myArray应该是类似“myArray”的字符串吗?@AlfredZhong我看到您使用的数组是
int
s,这就是为什么我将其设置为
Integer
。但是没有理由不能将其转换为
String[]
List
@alfredhong我修改了第二个示例,使用
modeldattribute
而不是
RequestParam
RequestParam
是用于原语的。我遇到了一个[object object]错误,我猜这与$ajex将数据转换为封面下的字符串时的数据有关?这似乎在我们的案例中也起作用,而Vivin的答案没有。看起来它是在spring的最新版本中更新的。我会更新我的答案。
String[] arrayParam
public String controllerMethod(@RequestParam(value="myArray[]") Integer[] myArray){
    ...
}
$.ajax({
    type : "POST",
    url : "/myurl",
    data : {
        myArray: a //notice that "myArray" matches the value for @RequestParam
                   //on the Java side
    },
    success : function(response) {
       // do something ... 
    },
    error : function(e) {
       alert('Error: ' + e);
    }
}); 

@RequestMapping(value = "/save/", method = RequestMethod.POST)
    public String controllerMethod(@RequestParam(value="myArray[]") List<Integer> myArray){
        System.out.println("My Array"+myArray.get(0));
        return "";
    }