代码之家  ›  专栏  ›  技术社区  ›  Paddy Hallihan

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

  •  1
  • Paddy Hallihan  · 技术社区  · 6 年前

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

    我的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'];
    }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   executable    6 年前

    您应该将数组转换为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'];
    }
    
        2
  •  0
  •   Headbank    6 年前

    原始代码的问题是使用数组作为 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'];
    }
    
        3
  •  -3
  •   Ivan Ovcharenko    6 年前

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

    _ this.sendajaxrequest=函数(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对象作为数据变量。