Javascript隐藏输入数组
是否可以将隐藏输入字段的值作为数组,然后将其传递给Spring MVC控制器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
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'}是的,我很久以前就看到了。虽然我认为这很有趣,但它与使用w3学校作为简单参考毫无关系。我提供了链接,以便OP可以正确使用语法,而不是作为解决方案(特别是因为我说不应该使用.join()。@flex感谢您的指导和编辑!在此期间,我们将遵循这一点!:-)