2012-08-23 19 views
5

Come noto utilizzando ajax è possibile inviare dati al server, ma sono confuso sull'invio di un array per postare utilizzando XMLHttpRequest non una libreria come jQuery. La mia domanda è, è possibile inviare un array a php usando XMLHttpRequest e come fa jQuery inviare un array a php, voglio dire jQuery fa qualche lavoro addizionale per inviare un array al server (php $ _POST)?Come inviare array utilizzando XMLHttpRequest al server

risposta

10

Bene, non è possibile inviare altro che una stringa di byte. "L'invio di matrici" viene eseguito serializzando (facendo rappresentazione di stringa di oggetti) l'array e inviandolo. Il server analizzerà quindi la stringa e ricostruirà gli oggetti in memoria da essa.

Quindi invio [1,2,3] verso PHP potrebbe accadere in questo modo:

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) 

test.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) 

Btw, con jQuery si dovrebbe solo fare:

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

Grazie . puoi spiegare 'file_get_contents (" php: // input ");'? –

+1

@Red è la rappresentazione non elaborata del corpo della richiesta. Vedi http://php.net/manual/en/wrappers.php.php. Ad esempio, si consideri il modulo normale submit, dove si ha '$ _POST [" key "] ===" value "'. I contenuti di "" php: // input "' sono in questo caso '" key = value "', che è quello che PHP ha usato per costruire l'array '$ _POST' per te. Devi usarlo qui perché quando pubblichi JSON, php non riempie '$ _POST' (dato che' $ _POST' funziona solo per i form, non per JSON). – Esailija

+0

Quindi come ottengo i dati come '$ nome = $ _ POST ['nome']' quando uso '$ .post'? –

1

Questo dipende dal protocollo si sceglie di comprimere la struttura dei dati. I 2 più comunemente usati sono XML e JSON. Entrambi hanno i modi per dichiarare un array:

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

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

e non avrà alcun significativo lavoro supplementare da parte del server. In molti casi ridurrà effettivamente il lavoro poiché non è necessario utilizzare una convenzione di denominazione per distinguere tra di essi.

Problemi correlati