Ich habe Array von Funktion .Push gemacht. In Array sind sehr große Daten. Wie sende ich das am besten an das Skript 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;
}
Wie ist der beste Weg dafür?
Kodieren Sie Ihre Datenzeichenfolge in JSON.
dataString = ??? ; // array?
var jsonString = JSON.stringify(dataString);
$.ajax({
type: "POST",
url: "script.php",
data: {data : jsonString},
cache: false,
success: function(){
alert("OK");
}
});
In Ihrem PHP
$data = json_decode(stripslashes($_POST['data']));
// here i would like use foreach:
foreach($data as $d){
echo $d;
}
Hinweis
Wenn Sie Daten per POST senden, muss dies ein Schlüsselwertpaar sein.
Somit
data: dataString
ist falsch. Stattdessen:
data: {data:dataString}
dataString = [];
$.ajax({
type: "POST",
url: "script.php",
data:{data: $(dataString).serializeArray()},
cache: false,
success: function(){
alert("OK");
}
});
Daten in der Funktion jQuery ajax()
akzeptieren anonyme Objekte als Eingabe, siehe documentation . Ein Beispiel für das, wonach Sie suchen, ist:
dataString = {key: 'val', key2: 'val2'};
$.ajax({
type: "POST",
url: "script.php",
data: dataString,
cache: false,
success: function(){
alert("OK");
}
});
Sie können die POST/GET-Abfrage auch selbst schreiben, wie key=val&key2=val2
, aber Sie müssen damit umgehen, sich selbst zu entgehen, was unpraktisch ist.
dataString schlägt vor, dass die Daten in einer Zeichenfolge formatiert sind (und möglicherweise durch ein Zeichen getrennt werden).
$data = explode(",", $_POST['data']);
foreach($data as $d){
echo $d;
}
wenn Datumszeichenfolge keine Zeichenfolge ist, sondern ein Array (was Ihre Frage angibt), verwenden Sie JSON.
Wenn Sie versucht haben, ein einteiliges Array zu senden und jquery es in durch Kommas getrennte Werte konvertiert> :(, folgen Sie dem nachstehenden Code und ein tatsächliches Array wird an php
übergeben und nicht an alle Kommas getrennter Stier **.
Angenommen, Sie müssen ein einzelnes Dimensionsarray mit dem Namen myvals
anhängen.
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) {
...
Nun in php
, wenn Sie dies tun
print_r($_POST);
Sie erhalten ..
Array
(
[someinputinsidetheform] => 023
[anotherforminput] => 111
[myvals] => Array
(
[0] => 21
[1] => 52
[2] => 13
[3] => 24
[4] => 75
)
)
Verzeihen Sie meine Sprache, aber es gibt eine Menge von Rube-Goldberg -Lösungen, die überall im Web und speziell auf SO verstreut sind, aber keine von ihnen ist elegant oder löst das Problem, tatsächlich ein eindimensionales Array über php
zu posten Ajax Post. Vergiss nicht, diese Lösung zu verbreiten.