Ajax和JavaScript,如何在不使用JQuery的情况下POST数组?

5

我通过Ajax调用一个PHP函数:

var ajax = new XMLHttpRequest();
ajax.open("POST", "file.php", true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

ajax.onreadystatechange = function(){
    if(ajax.readyState == 4 && ajax.status == 200){
        var returnVal = JSON.parse(ajax.responseText);

        // do stuff here //
    }
}   
ajax.send('term=' + javaScriptArray);

一切正常,当发送单个值时,它可以正常工作,但是在我尝试POST一个数组时则会出问题。在我的PHP函数中,我正在检查POST变量是否为数组:
is_array($_POST['term']);

但它总是返回 false。

打印该值会输出以下内容:

value1,value2,value3

但是作为一个字符串发送,而不是作为数组。

这篇SO帖子有一个答案,它不作为数组发送,而是作为多个不同的变量,并使用GET方法:

ajax.open("GET","myserver.com/myfunction.php?var1=1&var2=2&var3=3",true);

我发送的数据项数量总是可变的,因此将其作为数组发送是最好的选择。对于我所做的事情来说,在PHP中使用简单的is_array()函数要更加简单。

我已经研究了设置多个变量的方法:

for(var i = 0; i < argument.length; i++){
    postString += 'arg' + i + '=' + argument[i] + '&';
}
ajax.send(postString);

但这仍然不能完全满足我的需求(涉及多个变量)。

我还尝试将它们全部发送到同一个变量名:

ajax.send('arg=one&arg=two&arg=three');

但是每一个后继的都会覆盖其前任。

我不想使用JQuery解决方案。我不需要整个库,这是我唯一需要的。

编辑1

我也想保持它为POST


JSON.stringify可以在没有jquery的情况下工作。 - mplungjan
2个回答

7

如果要将一个参数视为数组,必须使用 [] 符号。

var postArray = new Array();
for(var i = 0; i < argument.length; i++){
    postArray[i] = 'arg[]=' + encodeURIComponent(argument[i]);
}
ajax.send(postArray.join('&'));

1
做到了。我不知道通过[]语法来提交一个数组,非常感谢! - Birrel
1
如果可以的话,我会再次点赞.join() - 我以前从未见过这样的用法。 - Birrel

2

您需要明确告诉PHP,您正在发送一个数组。通常可以通过添加[]来实现,就像在PHP中一样。因此,在您的示例中,请尝试使用以下内容:

ajax.send('arg[]=one&arg[]=two&arg[]=three');

是的,我注意到在 PHP 中现在总是会接收一个数组,即使只有一个值。谢谢。 - Birrel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接