通过 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 的多维数组的主要内容,如果未能解决你的问题,请参考以下文章