Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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
Javascript隐藏输入数组_Javascript_Arrays_Input_Hidden - Fatal编程技术网

Javascript隐藏输入数组

Javascript隐藏输入数组,javascript,arrays,input,hidden,Javascript,Arrays,Input,Hidden,是否可以将隐藏输入字段的值作为数组,然后将其传递给Spring MVC控制器 function foo(){ var myArray = new Array(); myArray[0] = "Hello"; myArray[1] = "World!"; document.getElementById("hiddenInp").value=myArray; } 然后在控制器中执行如下操作 @RequestMapping ... public String test(HttpServlet

是否可以将隐藏输入字段的值作为数组,然后将其传递给Spring MVC控制器

function foo(){
 var myArray = new Array();
 myArray[0] = "Hello";
 myArray[1] = "World!";
 document.getElementById("hiddenInp").value=myArray;
}
然后在控制器中执行如下操作

@RequestMapping ...
public String test(HttpServletRequest request){
String[] myArray = request.getParameter("hiddenInp");
// Assuming that the name of the hidden input field is also hiddenInp
System.out.println(myArray[0] + myArray[1]);
...
}

如果我使用的是关联数组,该怎么办?如果索引是string而不是int

,那么最好的选择是将数组字符串化,然后分配它

element.value=JSON.stringify([“你好”,“世界]);
结果值将是一个字符串,然后可以在服务器上解析该字符串,从而重新创建数组。如果希望具有类似于关联数组的对象,这种方法也适用于对象


我应该注意的是,虽然
JSON
目前在各种浏览器中都有相当好的支持,但较旧的浏览器可能不支持它。在这些情况下,您可以:

无论您如何在Javascript中设置它,您都必须在服务器上解析它。这可能意味着通过“,”将值拆分为一个C#数组,然后根据需要访问它。表单提交中发送的所有值都将按原样作为字符串发送


您可能希望使用设置隐藏输入的值。不过这并不是必需的-不使用.join()似乎很好。但重要的是要记住,值将是服务器上的字符串,而不是数组。

您只能将字符串作为参数传递给输入值。这意味着您的数组将通过使用“
”连接自动转换为字符串,您也可以使用手动转换

服务器端则需要按所选分隔符拆分该字符串

如果要将它们作为数组发送,afaik需要两个输入元素:

<input type="hidden" name="hiddenInp[]"<!-- should be more descriptive --> value="a" />
<input type="hidden" name="hiddenInp[]"<!-- the same name --> value="b" />
value=“b”/

我通过以下途径找到了答案

当您要分配任何JavaScript对象或数组时,请按如下方式执行:

var javascript_variable = 'object' or ['fruit1', 'fruit2', 'fruit3'];
$( '#hiden_input_element_unique_id' ).val( JSON.stringify(javascript_variable) );
$fruits_array = json_decode( $_POST['hiden_input_element_unique_name'] );
表单提交后,我们必须在服务器端对其进行如下解码:

var javascript_variable = 'object' or ['fruit1', 'fruit2', 'fruit3'];
$( '#hiden_input_element_unique_id' ).val( JSON.stringify(javascript_variable) );
$fruits_array = json_decode( $_POST['hiden_input_element_unique_name'] );

通过这种方式,您可以在服务器端获得任何JavaScript数组,您可以在客户端通过JavaScript将其设置到表单元素中

没有必要这样做。将该值设置为数组将完全执行.join()的操作。“使用.join()只不过是徒劳的额外处理而已。”ianpgall指出。我倾向于忘记JavaScript会自动将数组转换为适当的类型和值。我没想到它会起作用-我以为它可能包括“[”和“]”,但它最终的工作方式与.join()类似。没问题,只是想指出它!如果我有一个关联数组呢?其中标记是字符串而不是数字。@ianpgall-是
.join()
真的需要额外处理吗?如果您设置的值已经是一个字符串,那么JS不必转换它,因此它不会处理它两次。当然,
.join()
还提供了对连接字符的显式控制。您可以将输入值设置为数组。javascript基本上实现了.join()的功能,但没有必要使用.join(),除非您需要的是“,”以外的分隔符,这正是我所说的。但是,我甚至会使用.join(“,”)来明确我正在设置字符串。JavaScript没有关联数组。@JonathanSampson可能我使用了错误的术语。我的意思是,我做的不是像“0”和“1”这样的索引,而是
myArray[“A”]=“Hello”。我知道这是有效的,因为我尝试了
alert(myArray[“A”])
,它会给我一个带有“Hello”的弹出框@JonathanSampson:但是对象可以(并且正在)用作地图…@Bergi Yes;对象可以有关键点,但它们不是关联数组。一个很大的区别是价值的顺序。对于数组,顺序是固定的;对象及其属性不是这样。@szrizvi您指的是一个对象:
var myArray={'A':'Hello'}