如何在ajax中传递多维数组?

时间:2019-02-28 05:29:47

标签: javascript ajax

如何在ajax中传递inv数组?我在console.log中获得了inv数组值,但是在我的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 :(得分:0)

您的查询选择器不正确。您需要指定name属性,并用引号引起来的整个值,而不仅仅是下标内的部分。属性选择器必须放在方括号内。所以应该是:

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

除此之外,您的代码应该可以工作。在PHP中,所需的值将在$_POST['data']['Location']$_POST['data']['Name']等中。

不过,实际上并不需要额外的data包装器。如果您这样做:

data: inv

然后在PHP中,您将能够从$_POST['Location']$_POST['Name']等那里获取值。

无论哪种情况,它们都是复选框值的数组。

您还可以通过在选择器中添加:checked来简化JavaScript代码,因此无需在循环中进行检查。

var apply = document.querySelectorAll("[name='Filter["+FilterCat[j]+"][]']:checked");
var a = apply.map(el => el.value);
inv[FilterCat[j]]=a;