2009-05-21 8 views
5

Disons que j'ai un tableau d'objets javascript, et j'essaie de passer ces objets à une page php pour les enregistrer dans une base de données. Je n'ai aucun problème à transmettre une variable au php et à utiliser $ _POST ["entries"] sur cette variable mais je n'arrive pas à comprendre comment passer un tableau entier d'objets, donc je peux accéder à mes valeurs objects.entryId et .mediaType sur la page php. Oh et avant tout le monde demande, oui la raison pour laquelle je dois le faire de cette façon est parce que j'ai un uploader flash, que vous l'avez deviné .. télécharge dans un serveur CDN (distant) et le serveur distant répond seulement avec tels objets js.Comment passer un tableau d'objets javascript à PHP en utilisant POST

Merci de votre aide.

Voici mes fonctions JS:

function test() { 
     entriesObj1 = new Object(); 
     entriesObj1.entryId = "abc"; 
     entriesObj1.mediaType = 2; 
     entriesObj2 = new Object(); 
     entriesObj2.entryId = "def"; 
     entriesObj2.mediaType = 1; 

     var entries = new Array(); 

     entries[0] = entriesObj1; 
     entries[1] = entriesObj2; 
     var parameterString; 

     for(var i = 0; i < entries.length; i++) { 
      parameterString += (i > 0 ? "&" : "") 
       + "test" + "=" 
       + encodeURI(entries[i].entryId); 
     } 

     xmlhttp.open("POST","ajax_entries.php",true); 

     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xmlhttp.setRequestHeader("Content-length", parameterString.length); 
     xmlhttp.setRequestHeader("Connection", "close"); 

     xmlhttp.onreadystatechange = handleServerResponseTest; 
     xmlhttp.send(parameterString); 
    } 
    function handleServerResponseTest() { 
     if (xmlhttp.readyState == 4) { 
     if(xmlhttp.status == 200) { 
     alert(xmlhttp.responseText); 
     } 
     else { 
      alert("Error during AJAX call. Please try again"); 
     } 
     } 
    } 

Répondre

3

peut-être vous avez besoin de jeter un oeil à JSON et jQuery méthodes ajax:

.- http://blog.reindel.com/2007/10/02/parse-json-with-jquery-and-javascript/

.- http://us.php.net/json_decode

Le turorial est peut-être un peu démodé car la dernière version de jQuery est 1.3.x mais vous aurez une idée là-dessus et sur les fonctions PHP json ... si votre serveur n'a pas l'extension JSON activée, vous pouvez utiliser certaines classes php:

.- http://google.com.co/search?rlz=1C1GPEA_enVE314VE314&sourceid=chrome&ie=UTF-8&q=php+json+class

bonne chance!

+0

btw ... désolé pour les liens! – coma

3

J'ai aussi eu le même problème. Mais googler dint aide.

Je me suis essayé à modifier et tester. Et je l'ai eu. J'utilise cependant la méthode POST. Essayez l'idée avec la méthode GET. Voici l'idée:

Ajoutez la valeur d'index de tableau entre crochets au nom de variable Post/Get pour le tableau. Faites ceci pour chaque élément du tableau.

La partie var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2; du script suivant vous donnera un indice.

C'est le test JS, j'ai utilisé (Encore une fois cette méthode utilise POST pas GET):

var xmlAJAXObject; 

    function test() { 
     xmlAJAXObject=GetxmlAJAXObject(); 
     if (xmlAJAXObject==null) { 
      alert ("Oops!! Browser does not support HTTP Request."); 
      return false; 
     } 
     var namevalue1=encodeURIComponent("Element 1"); 
     var namevalue2=encodeURIComponent("Element 1"); 

     var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2; 

     xmlAJAXObject.open("POST", "test.php", true); 
     xmlAJAXObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xmlAJAXObject.setRequestHeader("Content-length", parameters.length); 

     xmlAJAXObject.onreadystatechange=stateChanged; 

     xmlAJAXObject.send(parameters); 

    } 

    function stateChanged() { 

     if (xmlAJAXObject.readyState ==4) { 
      if (xmlAJAXObject.status == 200) { 
       alert('Good Request is back'); 
       document.getElementById("show").innerHTML=xmlAJAXObject.responseText; 
      } 
     } 
    } 

    function GetxmlAJAXObject() { 
     if (window.XMLHttpRequest) { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
      return new XMLHttpRequest(); 
     } 
     if (window.ActiveXObject) { 
      // code for IE6, IE5 
      return new ActiveXObject("Microsoft.Microsoft.XMLHTTP"); 
     } 
     return null; 
    } 

Cela a fonctionné pour moi. Désolé pour le formatage et le code incomplet. Je voulais donner une direction. Les sites Web de Google ne pouvaient pas donner de solution. Espérant que ceci puisse t'être utile.

+0

J'espère que personne d'autre n'utilise cela en 2012 ... jquery, prototype, etc peut le faire mieux ... – ncubica

Questions connexes