如何将“数组”值发送(放入)到XMLHttpRequest对象Ajax请求中?

时间:2011-12-18 11:02:01

标签: php ajax arrays xmlhttprequest

我们可以使用Ajax发送(put)单个值以发送到XMLHttpRequest。但是如何发送“Array”元素的值?

示例#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。

1 个答案:

答案 0 :(得分:3)

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

问题在于您的初始方法无法正常工作(除了旧怪异模式下的IE和IE)。 getElementById通过 ID 获取元素,而您的元素只有名称。

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

请注意,您还需要对数据使用encodeURIComponent,以便可以安全地粘贴到网址中。

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('&');