2012-08-23 19 views
5

Como sé que usando ajax puedes enviar datos al servidor, pero estoy confundido acerca de enviar una matriz para publicar usando XMLHttpRequest, no en ninguna biblioteca como jQuery. Mi pregunta es, ¿es posible enviar una matriz al php usando XMLHttpRequest y cómo envía jQuery una matriz a php, es decir, jQuery hace algún trabajo adicional para enviar una matriz al servidor (php $ _POST)?Cómo enviar matrices usando XMLHttpRequest al servidor

Respuesta

10

Bueno, no puede enviar nada más que una serie de bytes. El "envío de matrices" se realiza serializando (haciendo una representación de cadena de objetos) la matriz y enviándola. El servidor analizará la cadena y volverá a generar objetos en memoria desde ella.

Así enviando [1,2,3] a PHP que podría suceder de esta manera:

var a = [1,2,3], 
    xmlhttp = new XMLHttpRequest; 

xmlhttp.open("POST", "test.php"); 
xmlhttp.setRequestHeader("Content-Type", "application/json"); 
xmlhttp.send('[1,2,3]'); //Note that it's a string. 
          //This manual step could have been replaced with JSON.stringify(a) 

prueba.php:

$data = file_get_contents("php://input"); //$data is now the string '[1,2,3]'; 

$data = json_decode($data); //$data is now a php array array(1,2,3) 

Por cierto, con jQuery que sólo haría:

$.post("test.php", JSON.stringify(a)); 
+1

Gracias . ¿Puedes explicar 'file_get_contents (" php: // input ");'? –

+1

@Red es la representación raw del cuerpo de la solicitud. Ver http://php.net/manual/en/wrappers.php.php. Por ejemplo, considere enviar formulario normal, donde tiene '$ _POST [" clave "] ===" valor "'. Los contenidos de '' php: // input "' son en este caso '" key = value "', que es lo que PHP usó para construir la matriz '$ _POST' por usted. Debe usarlo aquí porque al publicar JSON, php no completa '$ _POST' (ya que' $ _POST' solo funciona para formularios, no para JSON). – Esailija

+0

Entonces, ¿cómo obtengo datos como '$ name = $ _ POST ['name']' cuando uso '$ .post'? –

1

Eso depende del protocolo que elija para empaquetar su estructura de datos. Los 2 más comúnmente utilizados son XML y JSON. Ambos tienen formas de declarar una matriz:

JSON: ['one thing', 'another thing']

XML: <things><thing name='one thing' /><thing name='another thing' /></things>

y tampoco tendrá ningún trabajo adicional significativa por el servidor. En muchos casos, reducirá el trabajo, ya que no necesita utilizar una convención de nomenclatura para diferenciarlos.

Cuestiones relacionadas