Как передать многомерный массив в ajax? - PullRequest
0 голосов
/ 28 февраля 2019

Как передать массив inv в ajax?Я получил значение массива inv в console.log, но не могу получить массив на своей странице php.

<script>
var FilterCat=['Location','Name','City','Country','State'];
var inv =[];

for(var j = 0; j < FilterCat.length; j++) 
{
    var a =  FilterCat[j];
    a =[];
    var apply = document.getElementsByName("Filter['"+FilterCat[j]+"'][]");

    for(var i = 0; i < apply.length; i++) {
        if(apply[i].checked)
        {
            var F =  a.push(apply[i].value);
        }
    }
    inv[FilterCat[j]]=a;
}

$.ajax({
    type : "POST",
    url  : "../module/ApplyFilter.php",
    data :{data:inv},
    dataType :'JSON',
    success:function(response)
    {
        alert(response);
        console.log(response);
    }
});
<script>

После цикла for я получу значение в каждой переменной массива, но в данных ajax вернетсячерный массив

Здесь мудрое значение категории задается в его конкретном массиве, и мне нужно передать один основной массив в ajax.

Ответ моей консоли такой:

City: Array(0)
length: 0
__proto__: Array(0)
Country: Array(0)
length: 0
__proto__: Array(0)
State: Array(0)
length: 0
__proto__: Array(0)
Location: Array(2)
0: "Distributore"
1: "Vendor"
length: 2
__proto__: Array(0)
Name: Array(0)
length: 0
__proto__: Array(0)
length: 0
__proto__: Array(0)

1 Ответ

0 голосов
/ 28 февраля 2019

Ваш селектор запросов не верен.Вам нужно указать атрибут name и заключить в кавычки все значение, а не только часть внутри индекса.И селектор атрибута должен быть в квадратных скобках.Так и должно быть:

var apply = document.querySelectorAll("[name='Filter["+FilterCat[j]+"][]']");

Кроме этого, ваш код должен работать.В PHP нужные значения будут в $_POST['data']['Location'], $_POST['data']['Name'] и т. Д.

Дополнительная оболочка data на самом деле не нужна.Если вы сделаете:

data: inv

Тогда в PHP вы сможете получить значения из $_POST['Location'], $_POST['Name'] и т. Д.

В любом случае это будут массивызначений флажка.

Вы также можете упростить код JavaScript, добавив :checked к своему селектору, так что вам не нужно проверять это в цикле.

var apply = document.querySelectorAll("[name='Filter["+FilterCat[j]+"][]']:checked");
var a = apply.map(el => el.value);
inv[FilterCat[j]]=a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...