web-dev-qa-db-fra.com

Passer le tableau Javascript -> PHP

Disons que j'ai un tableau javascript avec un tas d'éléments (de 50 à 200).

Je veux envoyer cela à PHP (instruction préparée) en utilisant ajax. Actuellement, je .load _ un fichier php plusieurs fois à l’intérieur d’une boucle, mais je souhaite le convertir en tableau et l’envoyer une fois, en chargeant le fichier PHP une fois au lieu de 50 à 200 fois).

array[i] = variable;

59
switz

Vous pouvez utiliser JSON.stringify(array) pour encoder votre tableau en JavaScript, puis utiliser $array=json_decode($_POST['jsondata']); dans votre script PHP) pour le récupérer.

101
Gareth

Les requêtes AJAX ne sont pas différentes des requêtes GET et POST sont initiées via un <form> élément. Ce qui signifie que vous pouvez utiliser $ _GET et $ _POST pour récupérer les données.

Lorsque vous faites une demande AJAX (exemple jQuery):

// JavaScript file

elements = [1, 2, 9, 15].join(',')
$.post('/test.php', {elements: elements})

C'est (presque) équivalent à poster ce formulaire:

<form action="/test.php" method="post">
  <input type="text" name="elements" value="1,2,9,15">
</form>

Dans les deux cas, côté serveur, vous pouvez lire les données de la variable $ _POST:

// test.php file

$elements = $_POST['elements'];
$elements = explode(',', $elements);

Par souci de simplicité, je joins les éléments avec une virgule ici. La sérialisation JSON est cependant une solution plus universelle.

28
Alexey Lebedev

Voici une fonction permettant de convertir un tableau ou un objet js en un tableau compatible php à envoyer en tant que paramètre de requête http get:

function obj2url(prefix, obj) {
        var args=new Array();
        if(typeof(obj) == 'object'){
            for(var i in obj)
                args[args.length]=any2url(prefix+'['+encodeURIComponent(i)+']', obj[i]);
        }
        else
            args[args.length]=prefix+'='+encodeURIComponent(obj);
        return args.join('&');
    }

préfixe est un nom de paramètre.

EDIT:

var a = {
    one: two,
    three: four
};

alert('/script.php?'+obj2url('a', a)); 

Produira

/script.php?a[one]=two&a[three]=four

ce qui vous permettra d'utiliser $ _GET ['a'] comme un tableau dans script.php. Vous devrez vous frayer un chemin dans votre moteur ajax préféré en fournissant l'URL à appeler script.php à partir de js.

2
Dennis Kreminsky