отправить переменную массива javascript в сценарий php, используя jquery ajax (получая строку как вывод вместо массива) - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь отправить JavaScript массив в PHP скрипт, используя Ajax, но когда я пытаюсь var_dump $ _ POST ['file_paths'] получить строку вместо массива в качестве вывода, я хотите вывод в формате массива не в строковом формате. это из-за настройки Ajax, которую я использую в коде, подобном contentType: false и processData: false .

я пытался JSON декодирование и кодирование, все еще получая строка как вывод, если кто-нибудь может указать мне правильное направление. (нужен вывод в формате массива, а не в строке)

HTML Разметка: (загрузка папки)

<form id='submit' action='' method="post">
            <div id="upload">
                <div class="fileContainer">

                    <input id="myfiles" type="file" name="myfiles[]" multiple="multiple" webkitdirectory multiple directory />
                </div>
            </div>
            <input id="directory_name" type="text" name="directory_name" placeholder="Directory Name" >
</form>

Это просто js для извлечения всех данных формы, таких как имя родительского каталога, данные файла и путь к файлу, используя

webkitRelativePath

после извлечения всех данных, отправляющих два массива, 1-й файл массив и второй это массив file_paths для php скрипта, когда я console.log file_paths массив получает массив.

JS скрипт:

            $(document).ready(function() {
                $('#myfiles').on("change", function() {

                    var myfiles = document.getElementById("myfiles");
                    var file_paths = [];
                    var files = myfiles.files;
                    var new_directory_name =$('#directory_name').val();
                    var data = new FormData();
                    data.append('new_directory_name',new_directory_name);
                    data.append('action', 'upload_folder_to_server');
                    data.append('data_room_id', 55);
                    data.append('username', 'saurabh');
                    for (i = 0; i < files.length; i++) {
                        data.append('file' + i, files[i]);
                        file_paths.push(files[i].webkitRelativePath);
                        console.log(files[i].webkitRelativePath);
                    }
                    //file_paths = JSON.stringify(file_paths);
                    console.log(file_paths);
                    data.append('file_paths', file_paths);
                    $.ajax({
                        method: "POST",
                        url: ajaxurl,
                        contentType: false,
                        data: data,
                        processData: false,
                        //cache: false
                    }).done(function(msg) {
                        $("#loadedfiles").append(msg);
                    });
                });
            });

javascript вывод:

Array(3) [ "first folder/second folder/third folder/upload_groupmembers_additonal_login_sample(7).xlsx", "first folder/second folder/upload_groupmembers_additonal_login_sample(7).xlsx", "first folder/upload_groupmembers_additonal_login_sample(7).xlsx" ]

В PHP Скрипт, когда var_dump file_paths получает выходные данные в строковом формате. PHP Сценарий:

function upload_folder_to_server()
{
    var_dump($_POST['file_paths']);
}
add_action('wp_ajax_upload_folder_to_server', 'upload_folder_to_server');
add_action('wp_ajax_nopriv_upload_folder_to_server', 'upload_folder_to_server');

Вывод:

string(232) "first folder/second folder/third folder/upload_groupmembers_additonal_login_sample(7).xlsx,first folder/second folder/upload_groupmembers_additonal_login_sample(7).xlsx,first folder/upload_groupmembers_additonal_login_sample(7).xlsx" 

Может кто-нибудь объяснить мне, почему я получаю строку в PHP и массив в JavaScript

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Вы должны быть в состоянии сделать это с JSON.stringify() и json_decode().

Стригировать его перед отправкой с JS:

const jsonArr = JSON.stringify(data);

Разберите его, когда получите его на PHP конце:

$parsedArr = json_decode($_POST['file_paths']);

ИЛИ

Что вы можете сделать, это преобразовать строку в массив, когда вы получите ее на конце PHP.
Все, что вам нужно сделать, это просто добавить это:

$str = isset($_POST['file_paths']) ? $_POST['file_paths'] : ''; // Use condition to check if there is a post request with that name coming in
$arr = explode(",", $str);

В первом параметре функции explode() Вы можете указать, где вы хотите разделить строку. Подробнее здесь .

0 голосов
/ 17 февраля 2020
  var myfiles = document.getElementById("myfiles");
                    var file_paths = [];
                    var files = myfiles.files;
                    var new_directory_name =$('#directory_name').val();
                    var data = new FormData();
                    data.append('new_directory_name',new_directory_name);
                    data.append('action', 'upload_folder_to_server');
                    data.append('data_room_id', 55);
                    data.append('username', 'saurabh');
                    for (i = 0; i < files.length; i++) {
                        data.append('file' + i, files[i]);
                        file_paths.push(files[i].webkitRelativePath);
                        console.log(files[i].webkitRelativePath);
                    }
                    //file_paths = JSON.stringify(file_paths);
                    console.log(file_paths);
                    data.append('file_paths', file_paths);

замените на это и попробуйте

var myfiles = document.getElementById("myfiles");
var file_paths = [];
var files = myfiles.files;
var new_directory_name =$('#directory_name').val();
var data = new FormData();
data.set('new_directory_name',new_directory_name);
data.set('action', 'upload_folder_to_server');
data.set('data_room_id', 55);
data.set('username', 'saurabh');
for (i = 0; i < files.length; i++) {
data.set('file' + i, files[i]);
file_paths.push(files[i].webkitRelativePath);
console.log(files[i].webkitRelativePath);
}
data.set('file_paths', file_paths);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...