Как передать многомерный массив с помощью 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",
.....