Javascript 将数组从JS传递到PHP并创建会话变量

Javascript 将数组从JS传递到PHP并创建会话变量,javascript,php,arrays,session,Javascript,Php,Arrays,Session,我想将一个数组从JS传递到PHP,然后在那里使用它,我收集JS中的值并将它们发送到另一个文件,在那里我尝试将其转换为$\u会话变量,但当我在此上执行var\u转储时,它会给我一个带有逗号分隔值的字符串。有更好的方法吗 我的JS: var value_1 = document.getElementById("value_1").value; var value_2 = document.getElementById("value_2").value; var value_3 = document.

我想将一个数组从JS传递到PHP,然后在那里使用它,我收集JS中的值并将它们发送到另一个文件,在那里我尝试将其转换为$\u会话变量,但当我在此上执行var\u转储时,它会给我一个带有逗号分隔值的字符串。有更好的方法吗

我的JS:

var value_1 = document.getElementById("value_1").value;
var value_2 = document.getElementById("value_2").value;
var value_3 = document.getElementById("value_3").value;
var value_4 = document.getElementById("value_4").value;
var value_5 = document.getElementById("value_5").value;

var values = [];
values.push(value_1);
values.push(value_2);
values.push(value_3);
values.push(value_4);
values.push(value_5);

var formData = new FormData();
formData.append("values", values);
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    if(this.readyState == 4 && this.status == 200){
        // success
    }
};
xmlhttp.open("POST", "myfile.php", true);
xmlhttp.send(formData);
PHP:


更好的方法是使用jQuery$.ajax()函数:

_this.sendAjaxRequest=函数(url、数据、回调、errorCallback){


您可以使用JSON对象作为数据变量。

您应该将数组转换为JSON,如:

var value_1 = document.getElementById("value_1").value;
var value_2 = document.getElementById("value_2").value;
var value_3 = document.getElementById("value_3").value;
var value_4 = document.getElementById("value_4").value;
var value_5 = document.getElementById("value_5").value;

var values = [];
values.push(value_1);
values.push(value_2);
values.push(value_3);
values.push(value_4);
values.push(value_5);

var json_upload = "values=" + JSON.stringify({values});
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "myfile.php");
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(json_upload);
PHP

<?php
session_start();
if(isset($_POST['values'])){
    $_SESSION['values'] = $_POST['values'];
}

原始代码的问题是使用数组作为的值参数(应该是字符串,JavaScript引擎在您的情况下已将数组类型转换为该字符串)

如果您改为使用相同的键名加上一对空方括号(例如,
values[]
),则PHP会自动将这些值组成一个数字数组

JavaScript:

var formData = new FormData();
for(var i = 1; i <= 5; i++) {
    formData.append("values[]", document.getElementById("value_" + i).value);
}
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    if(this.readyState == 4 && this.status == 200){
        // success
    }
};
xmlhttp.open("POST", "myfile.php", true);
xmlhttp.send(formData);
var formData=new formData();

对于(var i=1;我确定它会给您一个带有逗号分隔值的字符串,还是更像
[“value\u 1”、“value\u 2”、“value\u 3”]
?是的,我会
var\u转储($\u会话['values']));
然后返回
C:\wamp64\www\\::string'value1,value2,value3,value4,value5
您可以将数组字符串化为一个json字符串,发布到PHP,然后用PHP进行解码。@executable的可能重复我没有将您的标记作为可能的重复和答案。我觉得应该删除该标记。这对o不公平后来可能会有人想发布更多答案。他不使用jQuery“更好的方法是使用jQuery$.ajax()”-为什么包括一个100kb的臃肿js库是一个“更好”的方法?为什么这个“更好”?当外部依赖不在其他地方使用时包含它?您好,谢谢您的回答,我可能会回来使用jQuery。@Paddyhalihan-如果您想学习正确的开发,我会坚持您现在所学到的,并解决问题。您不想成为“库”开发人员(一个实际上不懂这种语言的开发人员,但只知道几个库)。使用工具和库没有什么错,但仅仅为此包含一个100kb的库是过分的,对最终用户来说是不好的(需要下载所有额外的膨胀)。我这样做了,只是更改了一行
$\u SESSION['values']=json\u decode($\u POST['values'];
并获得了所需的结果
<?php
session_start();
if(isset($_POST['values'])){
    $_SESSION['values'] = $_POST['values'];
}
var formData = new FormData();
for(var i = 1; i <= 5; i++) {
    formData.append("values[]", document.getElementById("value_" + i).value);
}
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
    if(this.readyState == 4 && this.status == 200){
        // success
    }
};
xmlhttp.open("POST", "myfile.php", true);
xmlhttp.send(formData);
<?php
session_start();
if(isset($_POST['values'])){
    $_SESSION['values'] = $_POST['values'];
}