Как передать многомерный массив с помощью jQuery AJAX post?
Я использую Serialize() для передачи данных формы флажка с Post () для корзины, которая может содержать несколько элементов одной категории.
когда я публикую их с помощью кнопки отправки, он отлично работает с несколькими значениями, передаваемыми и отображаемыми в одной категории.
однако, когда я использовал jQuery serialize (), он будет показывать только один элемент для каждой категории и всего две категории. Это проблема массива, но я не могу ее решить.
есть альтернативная функция JQuery, которую я должен использовать для передачи многомерного массива?
5 ответов
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 с помощью
$data = file_get_contents('php://input');
$data = json_decode($data, true);
Я не нашел хорошего решения, поэтому я решил это с помощью в формате JSON.преобразовать в строки(); вот мой код
клиентской стороне :
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. Значения из флажков и переключателей (входы типа "радио" или "флажок") включаются только в том случае, если они установлены.
сначала проверьте свой код. Трудно помочь дальше, не видя ваш код.
вот мой фрагмент 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",
.....