Invia array con script Ajax in PHP

Ho matrice fatta dalla funzione .push . Nell’array sono dati molto grandi. Come è il modo migliore per inviare questo script in 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; } 

Come è il modo migliore per questo?

Codifica la stringa di dati in JSON.

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

Nel tuo PHP

 $data = json_decode(stripslashes($_POST['data'])); // here i would like use foreach: foreach($data as $d){ echo $d; } 

Nota

Quando invii i dati tramite POST, deve essere una coppia di valori chiave.

così

data: dataString

è sbagliato. Invece:

data: {data:dataString}

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

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

I dati nella funzione jQuery ajax() accettano oggetti anonimi come input, vedi documentazione . Quindi un esempio di ciò che stai cercando è:

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

Puoi anche scrivere query POST / GET da solo, come key=val&key2=val2 , ma dovresti gestire l’escape di te stesso che non è pratico.

dataString suggerisce che i dati siano formattati in una stringa (e magari delimitati da un carattere).

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

se dataString non è una stringa ma in pratica un array (cosa indica la tua domanda) usa JSON.

Se hai provato a inviare un solo array dimentional e jquery lo ha convertito in valori separati da virgola> 🙁 allora segui il codice sottostante e un array effettivo verrà inviato a php e non a tutti i tori separati da virgola **.

Supponiamo che tu debba albind un singolo array dimensionale chiamato myvals .

 jQuery('#someform').on('submit', function (e) { e.preventDefault(); var data = $(this).serializeArray(); var myvals = [21, 52, 13, 24, 75]; // This array could come from anywhere you choose for (i = 0; i < myvals.length; i++) { data.push({ name: "myvals[]", // These blank empty brackets are imp! value: myvals[i] }); } jQuery.ajax({ type: "post", url: jQuery(this).attr('action'), dataType: "json", data: data, // You have to just pass our data variable plain and simple no Rube Goldberg sh*t. success: function (r) { ... 

Ora dentro php quando lo fai

 print_r($_POST); 

Otterrete ..

 Array ( [someinputinsidetheform] => 023 [anotherforminput] => 111 [myvals] => Array ( [0] => 21 [1] => 52 [2] => 13 [3] => 24 [4] => 75 ) ) 

Perdonate la mia lingua, ma ci sono un sacco di soluzioni Rube-Goldberg sparse in tutto il web e specialmente su SO, ma nessuna di esse è elegante o risolve il problema di pubblicare in realtà un array monodesmensionale su php tramite posta elettronica . Non dimenticare di diffondere questa soluzione.