2012-08-23 16 views
5

Jak wiem przy użyciu ajax można wysłać dane do serwera, ale jestem zdezorientowany wysyłania tablicy do postu przy użyciu XMLHttpRequest żadnej biblioteki jak jQuery. Moje pytanie brzmi, czy jest możliwe wysłanie tablicy do php przy użyciu XMLHttpRequest i jak jQuery wysyła tablicę do php, to znaczy czy jQuery robi jakąkolwiek dodatkową pracę, aby wysłać tablicę do serwera (php $ _POST)?Jak wysyłać tablice za pomocą XMLHttpRequest do serwera

Odpowiedz

10

Nie można wysłać niczego poza łańcuchem bajtów. "Wysyłanie tablic" odbywa się poprzez szeregowanie (tworzenie reprezentacji ciągów obiektów) tablicy i wysyłanie jej. Serwer następnie przeanalizuje łańcuch i ponownie zbuduje z niego obiekty znajdujące się w pamięci.

Więc wysyłania [1,2,3] nad PHP może się zdarzyć tak:

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, z jQuery byłoby po prostu zrobić:

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

Dziękuję . czy możesz wyjaśnić 'file_get_contents (" php: // input ");'? –

+1

@Red to surowa reprezentacja treści żądania. Zobacz http://php.net/manual/en/wrappers.php.php. Na przykład, rozważ składanie formularza normalnego, gdzie masz '$ _POST [" klucz "] ===" wartość ". Zawartość '' php: // input "' to w tym przypadku '" key = value "', czyli to, co PHP użył do zbudowania tablicy '$ _POST'. Musisz go użyć tutaj, ponieważ podczas wysyłania JSON, php nie wypełnia '$ _POST' (ponieważ' $ _POST' działa tylko dla formularzy, nie JSON). – Esailija

+0

W jaki sposób otrzymuję dane jako '$ name = $ _ POST ['name']', gdy używam '$ .post'? –

1

To zależy od protokołu wybrać pakować swoje struktury danych. 2 najczęściej używane to XML i JSON. Obie mają sposoby, aby zadeklarować tablicę:

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

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

i nie podejmie żadnej znaczącej dodatkowej pracy przez serwer. W wielu przypadkach faktycznie zmniejszy to pracę, ponieważ nie trzeba używać konwencji nazewnictwa, aby je rozróżnić.

Powiązane problemy