Передайте массив из JS в PHP и создайте переменную SESSION - PullRequest
0 голосов
/ 04 января 2019

Я хочу передать массив из 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'];
}

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Вы должны преобразовать ваш массив в 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'];
}
0 голосов
/ 04 января 2019

Ваша проблема с исходным кодом заключалась в использовании массива в качестве аргумента значения для 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'];
}
0 голосов
/ 04 января 2019

Лучший способ - использовать функцию 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 в качестве переменной данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...