我一直在使用Serialize()来传递带有Post()的复选框表单数据,用于可以容纳同一类别的多个项目的购物篮。
当我使用提交按钮发布它时,它可以正常工作,并传递多个值并显示在一个类别下。
但是当我使用Jquery serialize()时,每个类别只显示一个项目,总共只显示两个类别。这是一个数组问题,但我无法解决。
我应该使用另一种JQuery函数来传递一个多维数组吗?
答案 0 :(得分:15)
Jquery将直接采用多维数组,无需序列化。
var data = {
foo: 123,
bar: 456,
rows: [
{
column1 : 'hello',
column2 : 'hola',
column3 : 'bonjour',.
},
{
column1 : 'goodbye',
column2 : 'hasta luego',
column3 : 'au revoir',
},
],
test1:{
test2: {
test3: 'baz'
}
}
};
_Post PHP文件中的数据看起来像这样
Array
(
[foo] => 123
[bar] => 456
[rows] => Array
(
[0] => Array
(
[column1] => hello
[column2] => hola
[column3] => bonjour
)
[1] => Array
(
[column1] => goodbye
[column2] => hasta luego
[column3] => au revoir
)
)
[test1] => Array
(
[test2] => Array
(
[test3] => baz
)
)
)
一旦定义了数据多维数组,您的Ajax就可以像
一样简单$.ajax({
type: 'post',
cache: false,
url: './ajax.php',
data: data
});
如果您的帖子数组可能包含您不了解的字段,则可以使用
轻松访问php文件中的Post数组。$data = file_get_contents('php://input');
$data = json_decode($data, true);
答案 1 :(得分:2)
我没有找到任何好的解决方案,所以我使用 JSON.stringify(); 解决了这个问题 这是我的代码
客户方:
var data = {a:{'foo':'bar'},b:{'this':'that'}};
$.ajax({ url : '/',
type : 'POST',
data : {'data':JSON.stringify(data)},
success : function(){ }
});
服务器端:
$data = json_decode($_POST['data']);
print_r($data);
// Result:
// Array( "a" => Array("foo"=> "bar"), "b" => Array("that" => "this"))
答案 2 :(得分:1)
$.post(url, {"myarray":arrayData}, function(data){/*stuff*/}, 'json');
服务器端你可以访问它,例如用php
$myArray = $_POST['myarray'][0];
foreach($myArray as $item)
{
/*logic here for picking apart your array*/
}
答案 3 :(得分:0)
来自jQuery文档:
要使表单元素的值包含在序列化字符串中,该元素必须具有name属性。复选框和单选按钮(“radio”或“checkbox”类型的输入)中的值仅在选中时才包含。
首先检查您的代码。没有看到你的代码就很难进一步帮助。
答案 4 :(得分:0)
这是我的元代码片段,对我来说效果很好......
var f={};
f.text = "SOME DATA";
f.any_other_field = some_other_value;
f.items = [];
$("#droppable .or").each(function(ee){
var tmp={};
tmp.id = $(this).data("cid");
tmp.name = $(this).find(".ornazev").text();
tmp.price = $(this).data("price");
tmp.currency = $(this).data("currency");
tmp.ks = 1;
f.items.push(tmp);
});
$.ajax({
type: "POST",
url: urlsave,
data: {"f":f},
dataType: "text",
.....
答案 5 :(得分:0)
$.ajax({
type: 'post',
cache: false,
url: './ajax.php',
data: { arrayData }
});
您必须使用{}
来包含{ arrayData }
变量。
然后echo $_POST[arrayData];
将产生Array。如果没有,它将不会发送数组值。