it-swarm.com.de

Array mit Ajax senden an PHP Skript

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?

36
Paul Attuck

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}

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

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

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

7
John x

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.

3
Vyktor

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.

1
RvdK

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.

0