将Array从JS传递给PHP并创建SESSION变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Array从JS传递给PHP并创建SESSION变量相关的知识,希望对你有一定的参考价值。

我想将一个数组从JS传递给php,然后在那里使用它,我收集JS中的值并将它们发送到另一个文件,我尝试将其转换为$ _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'];
}
答案

您应该将数组转换为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'];
}
另一答案

您的原始代码的问题是使用数组作为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'];
}
另一答案

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

_this.sendAjaxRequest = function(url,data,callback,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对象作为数据变量。

以上是关于将Array从JS传递给PHP并创建SESSION变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP MVC 最佳实践 - 将 Session 变量从控制器传递给模型类或直接在模型中访问

怎样在php中得到js的值

将 PHP 数组传递给 JS - PHP Laravel 5.8 [重复]

将 PHP 数组传递给外部 jQuery $.ajax

PHP 数组到 JQuery

将 SESSION 变量传递给 JS