如何使用Jquery AJAX发布多维数组?

我一直在使用Serialize()来传递带有Post()的复选框表单数据,用于可以容纳同一类别的多个项目的篮子。

当我使用提交按钮发布它时,它可以正常工作,并传递多个值并显示在一个类别下。

但是当我使用Jquery serialize()时,它每个类别只显示一个项目,总共只显示两个类别。 这是一个数组问题,但我无法解决。

是否有一个替代JQuery函数我应该用于传递一个多维数组?

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' } } }; 

PHP文件中的_Post数据如下所示

 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 }); 

如果你的post数组可能包含你不知道的字段,你可以轻松地在php文件中访问你的Post数组

 $data = file_get_contents('php://input'); $data = json_decode($data, true); 

我没有找到任何好的解决方案,所以我使用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")) 
 $.post(url, {"myarray":arrayData}, function(data){/*stuff*/}, 'json'); 

服务器端你可以访问它,例如用PHP

 $myArray = $_POST['myarray'][0]; foreach($myArray as $item) { /*logic here for picking apart your array*/ } 

来自jQuery文档:

要使表单元素的值包含在序列化字符串中,该元素必须具有name属性。 复选框和单选按钮(“radio”或“checkbox”类型的输入)中的值仅在选中时才包括在内。

首先检查您的代码。 如果没有看到您的代码,很难提供帮助。

这是我的metacode片段,对我来说效果很好……

  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", .....