通过 ajax 到 PHP 的多维数组

Posted

技术标签:

【中文标题】通过 ajax 到 PHP 的多维数组【英文标题】:Multidimensional Arrays via ajax to PHP 【发布时间】:2012-04-14 07:06:12 【问题描述】:

好的,在这里严重挣扎。我在尝试通过 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';

我想通过post 将它发送到 php。我想我也可以将它们连接在一起,因为无论如何我都是多维的:

    main_array['peoplearray'] = peoplearray;

现在做 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);
)

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

$data= $_POST['data'];
print_r($data);

在萤火虫中:(an empty string)

当我取消注释 var data = JSON.stringify(main_array); 时,我得到以下信息:[][

如果我将 $data = json_decode($_POST['data']); 添加到我得到的 php 中:

Array ( )

基本上main_array 我意识到不需要是一个数组,所以我可以毫无问题地得到这些东西,但我需要做的是让peoplearray 结束,这样我就可以做一些foreach 等...在 php.ini 中使用它。任何帮助将不胜感激,我确信我只是愚蠢!

编辑:这背后的原因是 peoplearray 可能有 0 或 100 个条目,所以我只需要把它放到 php 中,这样我就可以 foreach 它来做数据库输入。如果有更好的方法,我将不胜感激,因为我对此还是很陌生。

编辑:感谢 Nicola 的回答,一切正常,除了 mainarry.peoplearray 的重要部分 - 它没有出现在返回 console.log 中,我无法在 PHP 中访问它。有任何解决方案,还是我必须将 foreach 智能放入 javascript 中,然后单独发送所有内容?

【问题讨论】:

你能把发出ajax请求的整个JS函数贴出来吗?如果您使用 console.log(main_array) (在调用 $.ajax 之前)它在 firebug 中显示什么? 我在 JSON.stringify 之前使用 console.log(main_array) 得到了正确的结果。在 JSON.stringify 之后我得到:[]。就我目前正在做的所有 ajax 而言。事实上,它是唯一真正的复制和粘贴!只是为了达到这一点,我一直在 Chrome 中调试数组,这不是我刚刚发现的。 【参考方案1】:

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

main_array['peoplearray'] = peoplearray;

等价于

main_array.peoplearray = peoplearray;

你应该像这样声明 main_array

var main_array = ;

然后尝试像这样更改您的功能:

var send = $.ajax(
        type: "POST",
        dataType: "json",
        cache: false,
        url: "theurl",
        data: data:main_array 
);

和服务器端

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

【讨论】:

首先,感谢您的回答。我意识到我对需要填写的对象/数组缺乏基本的理解。这很好用,但我在返回的对象中丢失了 peoplearray,尽管它之前显示过。另外我如何访问 php 端的每个属性?【参考方案2】:

我通过将peoplearray 分开来让它工作。

所以我按照 Nicola 所说的做了,并创建了 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 
);

然后使用 PHP,$_POST 中的所有内容都可用,如果您

echo json_encode($people); //or whatever var name it is stored as in the php 

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

send.done(function(msg) 
console.log(msg);
)

【讨论】:

这应该也可以让它们保持在一起,但这是一个很好的解决方案 是的,由于某种原因,当我在对象中有一个数组或数组中有一个数组时,post 和 return 都显示为 null,这就是为什么我必须拆分它们并确保每个“人”是peoplearray 中的一个对象。非常感谢 Nicola 的帮助。

以上是关于通过 ajax 到 PHP 的多维数组的主要内容,如果未能解决你的问题,请参考以下文章

Ajax以JSON访问从PHP返回的多维数组

无法使用 ajax 将多维数组传递给 php

动态创建多维对象/数组

通过 PHP cURL 将多维数组发布到 PayPal

如何通过表行而不是php中的列来回显多维数组值[关闭]

在jQuery中通过ajax发送多维复选框数组