2012-01-25 11 views
33

Mam tablicę utworzoną przez funkcję .push. W tablicy jest bardzo duże dane. W jaki sposób najlepiej wysłać to do skryptu PHP?Wysyłaj tablicę ze skryptem Ajax do PHP

dataString = ??? ; // array? 
    $.ajax({ 
     type: "POST", 
     url: "script.php", 
     data: dataString, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

script.php:

$data = $_POST['data']; 

    // here i would like use foreach: 

    foreach($data as $d){ 
    echo $d; 
    } 

jaki jest najlepszy sposób na to?

Odpowiedz

85

zakodować ciąg danych do JSON.

dataString = ??? ; // array? 
var jsonString = JSON.stringify(dataString); 
    $.ajax({ 
     type: "POST", 
     url: "script.php", 
     data: {data : jsonString}, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

W swojej PHP

$data = json_decode(stripslashes($_POST['data'])); 

    // here i would like use foreach: 

    foreach($data as $d){ 
    echo $d; 
    } 

Note

Podczas wysyłania danych za pośrednictwem POST, to musi być jako keyvalue pary.

Zatem

data: dataString

jest źle. Zamiast zrobić:

data: {data:dataString}

+11

Dlaczego warto używać 'JSON.stringify'? Co jest nie tak z po prostu 'data: {data: dataString}'? –

+0

@Rocket: Przypuszczam, że możesz to również zrobić, w takim przypadku Jquery dokona serializacji tablicy. – xbonez

+7

Wtedy nie potrzebujesz 'json_decode',' $ _POST ['data'] 'będzie już tablicą. –

6
dataString = []; 
    $.ajax({ 
     type: "POST", 
     url: "script.php", 
     data:{data: $(dataString).serializeArray()}, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

http://api.jquery.com/serializeArray/

+0

i jak mogę to później przeczytać w pliku PHP? –

+1

Ponieważ 'serializeArray' działa przez utworzenie łańcucha JSOn, najpierw musiałbyś użyć' json_decode' po stronie PHP – xbonez

+5

Proponowałbym upuszczenie 'serializeArray', i po prostu zrobienie' data: {data: dataString} '. Wtedy '$ _POST ['data']' będzie tablicą. –

3

danych w jQuery ajax() funkcja przyjmuje anonimowych obiektów jak jego wejście, zobacz documentation. Więc przykładem czego szukasz:

dataString = {key: 'val', key2: 'val2'}; 
$.ajax({ 
     type: "POST", 
     url: "script.php", 
     data: dataString, 
     cache: false, 

     success: function(){ 
      alert("OK"); 
     } 
    }); 

Można również napisać POST/GET kwerendy na własną rękę, jak key=val&key2=val2, ale trzeba by obsłużyć uciekając się co jest niepraktyczne.

+0

To nie działa dla mnie, jednak 'data: {id_arr: [zmienna tablicy tu idzie]} będzie dostępna jako tablica' $ _POST ['id_arr'] 'w PHP – bromelio

1

dataString sugeruje, że dane są sformatowane w ciągu znaków (i może być ograniczone przez znak).

$data = explode(",", $_POST['data']); 
foreach($data as $d){ 
    echo $d; 
} 

jeśli parametr dataString nie jest ciągiem znaków, ale wpływa na tablicę (co wskazuje twoje pytanie), użyj JSON.

+0

dataString to tylko przykład. Nie muszę tego używać, ale nie wiem, co muszę użyć: –

+1

'dane: {id_arr: [zmienna tablicowa idzie tutaj]},' będzie dostępne jako '$ _POST ['id_arr']' jako tablica w PHP – bromelio

Powiązane problemy