2011-08-04 6 views
16

J'apprends Ajax par l'échec et ont frappé un mur:Envoi Javascript objet à PHP via Ajax

J'ai un tableau (si elle compte, ce tableau est le stockage id numéro en fonction de ce que les cases à cocher les contrôles utilisateur) c'est écrit en Javascript.

J'ai une fonction qui est appelée lorsque l'utilisateur clique sur le bouton 'Enregistrer'. La fonction est la suivante:

function createAmenities() { 
    if (window.XMLHttpRequest) { 
     //code for IE7+, Firefox, Chrome and Opera 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     //code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById('message').innerHTML = xmlhttp.responseText; 
     } 
    } 

    var url = "create_amenities.php"; 

    xmlhttp.open("GET", url, true); 

    xmlhttp.send(); 

} 

Ma question est: Qu'est-ce que je peux mettre dans cette fonction pour tirer le tableau dans le script php je suis en train d'appeler (« create_amenities.php »)?

De plus, devrais-je essayer d'utiliser JSON? Et si oui, comment pourrais-je envoyer un objet JSON via ajax?

Merci d'avance.

Répondre

44

Si votre tableau a plus d'une dimension ou est un tableau associatif, vous devez utiliser JSON. JSON transforme une structure de tableau complète en une chaîne de caractères. Cette chaîne peut facilement être envoyée à votre application php et retournée dans un tableau php.

Plus d'informations sur JSON: http://www.json.org/js.html

var my_array = { ... }; 
var json = JSON.stringify(my_array); 

En PHP, vous pouvez décoder la chaîne avec json_decode:

http://www.php.net/manual/en/function.json-decode.php

var_dump(json_decode($json)); 
+3

Ceci est une solution propre (+1). Juste pour être complet: le tableau peut aussi être 'my_array = [...]' et après 'json = JSON.stringify (my_array)' il est envoyé en tant que 'url =" create_amenities.php? Json ";' – Jiri

+0

+1: Fonctionne très bien avec un code concis, facile à lire. – FreeAsInBeer

+0

Pouvez-vous s'il vous plaît m'aider à comprendre pourquoi mon tableau que j'ai créé en javascript converti en un objet quand je l'obtiens en php grâce à des paramètres de demande? BTW votre réponse a sauvé ma journée. Merci! – Simer

1

Parcourez la baie et ajoutez encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&' à la chaîne de requête à chaque fois. De plus, devrais-je essayer d'utiliser JSON? Vous pourriez, mais cela signifierait décoder JSON à l'autre extrémité au lieu de laisser la gestion des formulaires normale prendre soin de lui.

Et si oui, comment pourrais-je envoyer un objet JSON via ajax?

Il existe no such thing as a JSON object. JSON prend la forme d'une chaîne et vous pouvez inclure des chaînes dans les chaînes de requête (n'oubliez pas de encodeURIComponent).

-2

Tout d'abord, oui, ne pas écrire ajax la main . Il est peu probable que vous produisiez quelque chose qui fonctionne vraiment sur tous les navigateurs. La meilleure approche de votre problème actuel serait de soumettre votre tableau en tant que paramètres cgi.

Si les cases sont sous une forme, vous devez faire très peu - présenter simplement la forme,

<form><input type=checkbox ...><input type=checkbox ...> 
$.post("test.php", $("#testform").serialize()); 

Voir http://api.jquery.com/jQuery.post/ pour plus de détails sur la façon de le faire. Votre liste s'affichera sous forme de tableau en PHP.

Ou pour augmenter votre exemple avec quelque chose de très simple, faites ceci:

url = url + '?checkboxes=' + checkboxes.join(','); 

Maintenant, juste diviser l'intérieur PHP et vous l'avez retour!