我想将数组从JS传递到PHP,然后在其中使用,我在JS中收集值并将它们发送到fnother文件,在其中尝试将其转换为$ _SESSION变量,但是当我对此执行var_dump时它给了我一个用逗号分隔值的字符串。有更好的方法吗?
我的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:
if(isset($_POST['values'])){
$_SESSION['values'] = $_POST['values'];
}
答案 0 :(得分:1)
您应该将数组转换为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'];
}
答案 1 :(得分:0)
您的原始代码问题是使用数组作为FormData.append()的值参数(应该是一个字符串,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);
PHP:
<?php
session_start();
if(isset($_POST['values'])){
$_SESSION['values'] = $_POST['values'];
}
答案 2 :(得分:-3)
更好的方法是使用jQuery $ .ajax()函数:
_this.sendAjaxRequest =函数(URL,数据,回调,errorCallback){
var _type = $.inArray($.type(data), ['string', 'object']) > -1 ? 'post' : 'get';
var request = $.ajax({
'url' : url,
'type' : _type,
'dataType' : 'json',
'data' : data,
'cache' : false,
'success' : function(response) {
if (typeof callback != 'undefined' && callback) {
callback.call(_this, response);
return;
}
},
'error' : function(response) {
if (typeof errorCallback != 'undefined' && errorCallback) {
errorCallback.call(_this, response);
return;
}
}
});
};
您可以将JSON对象用作数据变量。