2011-12-18 104 views
1

我们可以发送(放)单个值,并通过Ajax发送到XMLHttpRequest。但是如何发送“数组”元素的值?如何发送(把)“数组”值到XMLHttpRequest对象Ajax请求?

例#1(好!)
对于这个简单的价值:

<input type="hidden" name="param" value="hello" /> 

我们可以简单地把值到XMLHttpRequest对象,如:

xmlhttp.open("GET","ajax.php?param="+document.getElementById("param").value,true); 
xmlhttp.send(); 

以上方法很简单,好。
但如何发送(放)“数组”值?

实施例#2 *(问题的数组值)

<input type="hidden" name="param[]" value="hello" /> 
<input type="hidden" name="param[]" value="world" /> 
... 
xmlhttp.open("GET","ajax.php?params="+document.getElementById("param").value,true); 


注:服务器方将用PHP。

回答

3

没有区别(名称略有变化除外)。就HTML,JavaScript和HTTP而言,它们只是名称属性中的[]的元素。只有PHP对表单控件的命名约定很挑剔(我遇到的每种其他服务器端语言都是单独服务器上的单个或多个值的预期,而不是服务器和客户端)

问题是,你的初始方法是不行的(除了在古老的IE和怪异模式下的IE)。 getElementById通过其ID获取元素,并且您的元素只有名称。

您可以提供元素ID或使用getElementsByName('param[]')和循环。

请注意,您还需要在数据上使用encodeURIComponent以使其在URL中保持安全。

var inputs = document.getElementsByName('param[]'); 
var query = []; 
for (var i = 0; i < inputs.length; i++) { 
    var input = inputs[i]; 
    query.push(encodeURIComponent(input.name) + '=' + encodeURIComponent(input.value)); 
} 
var url = "ajax.php?" + query.join('&'); 
+0

我不能得到你给的东西。另外,什么是'var input = inputs [1;'是指?单支架'[1'? – 2011-12-18 11:25:28

+0

这是一个错字。 – Quentin 2011-12-18 11:26:17

+0

似乎你的脚本在'for'循环中有错误。因为我不能在循环之后提醒(“aaaa”);' – 2011-12-18 11:38:16