通过ajax到PHP的多维数组

Zac*_*Zac 6 javascript php arrays jquery

好认真在这里挣扎.我试图通过ajax向PHP发送多维数组时遇到一些问题.这是我一直在尝试的:

为了简化而不是复制粘贴代码墙:

    peoplearray[0]  =  [name] => 'john'
                       [age]  => '28'
                       [sex]  => 'Male'
    peoplearray[1]  =  [name] => 'julie'
                       [age]  => '20'
                       [sex]  => 'Female'

    main_array['item'] = 'x';
    main_array['something'] = 'x';
    main_array['another'] = 'x';
Run Code Online (Sandbox Code Playgroud)

我希望通过这个获得这个post.我想我也可以将它们加在一起,因为我是多维的,因此:

    main_array['peoplearray'] = peoplearray;
Run Code Online (Sandbox Code Playgroud)

现在要做ajax:

// var data = JSON.stringify(main_array);

var send = $.ajax({
        type: "POST",
        cache: false,
        url: "theurl",
        data: {data:main_array} //I do change this `main_array` when using the above stringify!
});


send.done(function(msg) {
console.log(msg);
})
Run Code Online (Sandbox Code Playgroud)

在PHP中,我现在正在执行以下操作:

$data= $_POST['data'];
print_r($data);
Run Code Online (Sandbox Code Playgroud)

在萤火虫: (an empty string)

当我没有var data = JSON.stringify(main_array);注释时,我得到以下内容:[][

如果我添加$data = json_decode($_POST['data']);到PHP我得到:

Array ( )
Run Code Online (Sandbox Code Playgroud)

基本上main_array我意识到不需要是一个数组,所以我可以得到那些东西没有问题,但我需要做的是peoplearray结束,以便我可以做一些foreach等...用它在PHP中.任何帮助将不胜感激我相信我只是愚蠢!

编辑:这背后的原因是,peoplearray可能有0或100个条目,所以我只需要将其转换为PHP,这样我就foreach可以进行数据库输入.如果有一个更好的方法,我会非常感激听到它,因为我仍然是新手.

编辑:感谢Nicola的回答一切都很顺利,除了重要的部分是mainarry.peoplearray - 它没有出现在返回中console.log,我无法在PHP中访问它.任何有关此问题的解决方案或我是否必须将foreach智能放在javascript中并单独发送所有内容?

Nic*_*tti 7

首先main_array不是数组而是对象,因为在javascript中没有关联数组,因此

main_array['peoplearray'] = peoplearray;
Run Code Online (Sandbox Code Playgroud)

相当于

main_array.peoplearray = peoplearray;
Run Code Online (Sandbox Code Playgroud)

你应该像这样声明main_array

var main_array = {};
Run Code Online (Sandbox Code Playgroud)

然后尝试改变你的功能:

var send = $.ajax({
        type: "POST",
        dataType: "json",
        cache: false,
        url: "theurl",
        data: {data:main_array} 
});
Run Code Online (Sandbox Code Playgroud)

和服务器端

header('Content-type: application/json');
$data= $_POST['data'];
echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)


Zac*_*Zac 1

我通过保持独立来让它工作peoplearray

所以我按照尼古拉说的做了并创建了mainarray一个对象,即。用花括号声明:{}

peoplearray留下了一个数组,即用 声明[],但是然后name,age&sex我将字段创建为对象,即。{} 然后.push()将它们放入peoplearray.

然后ajax看起来如下:

var send = $.ajax({
        type: "POST",
        dataType: "json",
        cache: false,
        url: "theurl",
        data: {data:main_array, people:peoplearray} 
});
Run Code Online (Sandbox Code Playgroud)

那么对于 PHP,$_POST 中的所有内容都可用,并且如果您

echo json_encode($people); //or whatever var name it is stored as in the php 
Run Code Online (Sandbox Code Playgroud)

对象即name,age,sex属性显示在

send.done(function(msg) {
console.log(msg);
})
Run Code Online (Sandbox Code Playgroud)