web-dev-qa-db-fra.com

Comment passer un tableau multidimensionnel avec Jquery AJAX poster?

J'utilise Serialize () pour transmettre des données de formulaire de case à cocher avec Post () à un panier pouvant contenir plusieurs éléments de la même catégorie.

Lorsque je les publie à l'aide du bouton d'envoi, cela fonctionne correctement, plusieurs valeurs étant passées et affichées dans une catégorie.

Cependant, lorsque j'utilise Jquery serialize (), il ne montrera qu'un seul élément par catégorie et seulement deux catégories au total. C'est un problème de tableau mais je ne peux pas le résoudre.

Existe-t-il une fonction JQuery alternative que je devrais utiliser pour passer un tableau multidimensionnel?

9
user1337603

Jquery prendra directement des tableaux multi-dimensionnels, pas besoin de sérialiser.

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

Les données _Post dans votre fichier PHP ressemblent à ceci

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
                )

        )

    )

Une fois que vous avez défini votre tableau multidimensionnel de données, votre Ajax pourrait être aussi simple que

$.ajax({
          type:           'post',
          cache:          false,
          url:            './ajax.php',
          data:           data
      });

Si votre tableau de messages peut avoir des champs que vous ne connaissez pas, vous pouvez accéder facilement à votre tableau de messages dans votre fichier php avec

$data = file_get_contents('php://input');
$data = json_decode($data, true);
14
Branden S. Smith

Je n'ai pas trouvé de bonne solution, j'ai donc résolu cela en utilisant JSON.stringify (); voici mon code

Côté client :

var data = {a:{'foo':'bar'},b:{'this':'that'}};
$.ajax({ url        : '/',
         type       : 'POST',                                              
         data       : {'data':JSON.stringify(data)},
         success    : function(){ }
       });

Du côté serveur:

$data = json_decode($_POST['data']);
print_r($data);
// Result:
// Array( "a" => Array("foo"=> "bar"), "b" => Array("that" => "this"))
2
Maddy
$.post(url, {"myarray":arrayData}, function(data){/*stuff*/}, 'json');

côté serveur, vous y accéder par exemple avec php

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

À partir de la documentation jQuery:

Pour que la valeur d'un élément de formulaire soit incluse dans la chaîne sérialisée, l'élément doit avoir un attribut name. Les valeurs des cases à cocher et des boutons radio (entrées de type "radio" ou "case à cocher") ne sont incluses que si elles sont cochées.

Vérifiez votre code pour cela en premier. Difficile d'aider plus loin sans voir votre code.

0
Aaron

Voici mon fragment de métacode, qui me convient parfaitement ...

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