2009-05-21 14 views
5

Digamos que tengo una matriz de objetos javascript, y estoy tratando de pasar esos objetos a una página php para guardarlos en una base de datos. No tengo problemas para pasar una variable a php y usar $ _POST ["entries"] en esa variable, pero no puedo entender cómo pasar una matriz completa de objetos, así puedo acceder a mis valores de objects.entryId y .mediaType en la página php.Cómo pasar una matriz de objetos javascript a php usando POST

Ah, y antes de que nadie pregunte, sí, la razón por la que tengo que hacerlo es porque tengo una carga de flash, que lo adivinó ... carga en un servidor CDN (remoto) y el servidor remoto solo responde con tales objetos js.

Gracias por cualquier ayuda que cualquiera pueda ofrecer.

Aquí es mis funciones 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"); 
     } 
     } 
    } 

Respuesta

3

tal vez usted necesita tomar un vistazo a JSON y métodos Ajax jQuery:

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

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

El turorial es tal vez un poco obsoleto porque la última versión de jQuery es 1.3.x pero obtendrá una idea sobre eso y sobre las funciones PHP json ... si su servidor no tiene la extensión JSON activado, puede utilizar algunas clases PHP:

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

buena suerte!

+0

por cierto ... perdón por los enlaces! – coma

3

Yo también tuve el mismo problema. Pero google ayuda dint.

Traté de ajustar y probar. Y lo tengo. Aunque estoy usando el método POST. Pruebe la idea con el método GET. Aquí está la idea:

Agregue el valor del índice de la matriz entre corchetes al nombre de la variable Publicar/Obtener para la matriz. Haga esto para cada elemento de la matriz.

La parte var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2; de la siguiente secuencia de comandos le daría una pista.

Esta es la prueba de JS, he utilizado (método nuevo, esto no utiliza 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; 
    } 

Esto funcionó para mí. Perdón por el formato y el código incompleto. Quise dar una dirección. Los sitios web de Google Reault no pudieron dar una solución. Espero que encuentres esto útil.

+0

Espero que nadie más esté usando esto en 2012 ... jquery, prototype, etc. pueden hacerlo mejor ... – ncubica

Cuestiones relacionadas