2009-05-21 20 views
5

Powiedzmy, że mam tablicę obiektów javascript i próbuję przekazać te obiekty do strony php, aby zapisać je w bazie danych. Nie mam problemów z przekazywaniem zmiennej do php i używanie $ _POST ["entries"] dla tej zmiennej, ale nie mogę wymyślić jak przekazać całą tablicę obiektów, więc mogę uzyskać dostęp do moich wartości objects.entryId i .mediaType na stronie php.Jak przekazać tablicę obiektów javascript do php za pomocą POST

Aha, zanim ktokolwiek zapyta, tak, powód, dla którego muszę to zrobić w ten sposób, to dlatego, że mam program do przesyłania plików Flash, który zgadłeś. Wgrywa na serwer CDN (zdalny), a serwer zdalny odpowiada tylko z takie obiekty js.

Dzięki za pomoc, którą każdy może zapewnić.

Oto moje funkcje 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"); 
     } 
     } 
    } 

Odpowiedz

3

może trzeba spojrzeć na json i metody ajax jQuery:

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

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

The turorial jest może trochę przestarzały, ponieważ ostatnia wersja jQuery to 1.3.x, ale uzyskasz pomysł na ten temat i na temat funkcji PHP json ... jeśli twój Serwer nie posiada rozszerzenie json włączone można użyć niektórych klas PHP:

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

powodzenia!

+0

btw ... przepraszam za linki! – coma

3

Ja też miałem te same kłopoty. Ale skorzystaj z pomocy Google.

Próbowałem się poprawić i przetestować. I mam to. Używam jednak metody POST. Wypróbuj ten pomysł za pomocą metody GET. Oto pomysł:

Dołącz wartość indeksu tablicy w nawiasach kwadratowych do nazwy zmiennej Post/Get dla tablicy. Zrób to dla każdego elementu tablicy.

Część var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2; z poniższego skryptu dałaby wskazówkę.

To badanie JS, kiedyś (Ponownie metoda nie wykorzystuje POSTGET)

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

ten pracował mi. Przepraszamy za formatowanie i niekompletny kod. Chciałem dać kierunek. Serwisy internetowe Google nie mogą dać rozwiązania. Mam nadzieję że uznasz to za użyteczne.

+0

Mam nadzieję, że żadna inna jednostka nie używa tego w 2012 ... jquery, prototyp itp. Może to zrobić lepiej ... – ncubica

Powiązane problemy