web-dev-qa-db-fra.com

Envoyer un tableau avec Ajax à PHP scénario

J'ai tableau fait par la fonction .Push . Dans le tableau est de très grandes données. Quelle est la meilleure façon d’envoyer cela au script PHP?

   dataString = ??? ; // array?
   $.ajax({
        type: "POST",
        url: "script.php",
        data: dataString, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

script.php:

  $data = $_POST['data'];

  // here i would like use foreach:

  foreach($data as $d){
     echo $d;
  }

Comment est le meilleur moyen pour cela?

36
Paul Attuck

Encodez votre chaîne de données en JSON.

dataString = ??? ; // array?
var jsonString = JSON.stringify(dataString);
   $.ajax({
        type: "POST",
        url: "script.php",
        data: {data : jsonString}, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

Dans votre PHP

$data = json_decode(stripslashes($_POST['data']));

  // here i would like use foreach:

  foreach($data as $d){
     echo $d;
  }

Remarque

Lorsque vous envoyez des données via POST, il doit s'agir d'une paire de clés. 

Ainsi

data: dataString

est faux. Au lieu de faire:

data: {data:dataString}

95
xbonez
 dataString = [];
   $.ajax({
        type: "POST",
        url: "script.php",
        data:{data: $(dataString).serializeArray()}, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

http://api.jquery.com/serializeArray/

7
John x

Les données de la fonction jQuery ajax() accepte les objets anonymes en entrée, voir documentation . Voici un exemple de ce que vous recherchez: 

dataString = {key: 'val', key2: 'val2'};
$.ajax({
        type: "POST",
        url: "script.php",
        data: dataString, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

Vous pouvez également écrire vous-même une requête POST/GET, telle que key=val&key2=val2, mais vous devrez gérer vous échapper, ce qui est peu pratique.

3
Vyktor

dataString suggère que les données soient formatées dans une chaîne (et éventuellement délimitées par un caractère).

$data = explode(",", $_POST['data']);
foreach($data as $d){
     echo $d;
}

si Date, String n'est pas une chaîne mais implique un tableau (ce que votre question indique), utilisez JSON.

1
RvdK

Si vous avez essayé d’envoyer un tableau à une dimension et que jquery le convertissait en valeurs séparées par des virgules> :(, suivez le code ci-dessous et un tableau réel sera soumis} à php et pas tous les taureaux séparés par une virgule ** il.

Supposons que vous deviez attacher un seul tableau de dimensions nommé myvals

jQuery('#someform').on('submit', function (e) {
    e.preventDefault();
    var data = $(this).serializeArray();

    var myvals = [21, 52, 13, 24, 75]; // This array could come from anywhere you choose 
    for (i = 0; i < myvals.length; i++) {
        data.Push({
            name: "myvals[]", // These blank empty brackets are imp!
            value: myvals[i]
        });
    }

jQuery.ajax({
    type: "post",
    url: jQuery(this).attr('action'),
    dataType: "json",
    data: data, // You have to just pass our data variable plain and simple no Rube Goldberg sh*t.
    success: function (r) {
...

Maintenant dans php quand vous faites cela 

print_r($_POST);

Tu auras ..

Array
(
    [someinputinsidetheform] => 023
    [anotherforminput] => 111
    [myvals] => Array
        (
            [0] => 21
            [1] => 52
            [2] => 13
            [3] => 24
            [4] => 75
        )
)

Pardon, mon langage, mais il y a énormément de Rube-Goldberg solutions disséminées sur le Web et spécialement sur SO, mais aucune d’entre elles n’est élégante ni ne résout le problème de en affichant un tableau à une dimension à php via ajax post. N'oubliez pas de répandre cette solution.

0
Mohd Abdul Mujib