Übergabe des JavaScript-Arrays an PHP über jQuery $ .ajax

79

Ich möchte ein JavaScript-Array in PHP bearbeiten. Ist es möglich so etwas zu tun?

$.ajax({
       type: "POST",
       url: "tourFinderFunctions.php",
       data: "activitiesArray="+activities,
       success: function() {
            $("#lengthQuestion").fadeOut('slow');
       }
    });

Aktivitäten ist ein eindimensionales Array wie:

var activities = ['Location Zero', 'Location One', 'Location Two'];

Das Skript wird nicht vollständig ausgeführt, wenn ich dies versuche ... Wie kann ich es beheben?

krx
quelle

Antworten:

147
data: { activitiesArray: activities },

Das ist es! Jetzt können Sie in PHP darauf zugreifen:

<?php $myArray = $_REQUEST['activitiesArray']; ?>
Valentin Golev
quelle
10
Warum war diese Antwort so schwer zu finden? Danke, genau das habe ich gebraucht.
Vian Esterhuizen
So einfach wie ein Hacker! Gut gemacht! Du hast mich zum Lachen gebracht: D.
Arashtad Ltd
12

Sie möchten Ihr Array vor dem Senden als JSON codieren, oder Sie erhalten nur etwas Müll am anderen Ende.

Da Sie nur das Array senden, können Sie einfach Folgendes tun:

data: { activities: activities }

Dadurch wird das Array automatisch für Sie konvertiert.

Siehe hier für Details.

jvenema
quelle
11

Sie müssen dies in eine Zeichenfolge verwandeln. Sie können dies mit der stringify-Methode in der JSON2-Bibliothek tun.

http://www.json.org/

http://www.json.org/js.html

Der Code würde ungefähr so ​​aussehen:

var myJSONText = JSON.stringify(myObject);

Damit

['Location Zero', 'Location One', 'Location Two'];

Wird werden:

"['Location Zero', 'Location One', 'Location Two']"

Sie müssen sich an einen PHP-Guru wenden, um zu erfahren, wie dies auf dem Server gehandhabt wird. Ich denke, andere Antworten hier deuten auf eine Lösung hin.

Daten können auf ähnliche Weise vom Server zurückgegeben werden. Das heißt, Sie können es wieder in ein Objekt verwandeln.

var myObject = JSON.parse(myJSONString);
James Wiseman
quelle
9

Ich weiß, dass es vielleicht zu spät ist, dies zu beantworten, aber das hat bei mir sehr gut funktioniert:

  1. Stringifizieren Sie Ihr Javascript-Objekt (json) mit var st = JSON.stringify(your_object);

  2. Übergeben Sie Ihre POST-Daten als "Zeichenfolge" (möglicherweise mit jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Dekodieren Sie Ihre Daten auf der serverseitigen Verarbeitung: $data = json_decode($_POST['data']);

Das war's ... Sie können Ihre Daten frei verwenden.

Mehrdimensionale Arrays und einzelne Arrays werden als normale Arrays behandelt. Um darauf zuzugreifen, gehen Sie einfach wie gewohnt vor $foo[4].

Assoziative Arrays (Javsacript-Objekte) werden als PHP-Objekte (Klassen) behandelt. Um auf sie zuzugreifen, machen Sie es einfach wie Klassen : $foo->bar.

lu1s
quelle
2

Ich sollte so sein:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
masterdany88
quelle
1

Verwenden Sie die Funktion JQuery Serialize

http://docs.jquery.com/Ajax/serialize

Serialize wird normalerweise verwendet, um Benutzereingabedaten vorzubereiten, die an einen Server gesendet werden sollen. Die serialisierten Daten haben ein Standardformat, das mit fast allen serverseitigen Programmiersprachen und Frameworks kompatibel ist .

Gazzer
quelle
1

Das hat bei mir funktioniert:

$.ajax({
    url:"../messaging/delete.php",
    type:"POST",
    data:{messages:selected},
    success:function(data){
     if(data === "done"){

     }
     info($("#notification"), data);
    },
    beforeSend:function(){
         info($("#notification"),"Deleting "+count+" messages");
    },
    error:function(jqXHR, textStatus, errorMessage){
        error($("#notification"),errorMessage);
    }
});

Und das für dein PHP :

$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}
I.Tyger
quelle
1

Verwenden Sie die in PHP integrierte Funktionalität, um den Array-Operanden an den gewünschten Variablennamen anzuhängen.

Wenn wir einem Javascript-Array wie folgt Werte hinzufügen:

acitivies.push('Location Zero');
acitivies.push('Location One');
acitivies.push('Location Two');

Es kann wie folgt an den Server gesendet werden:

$.ajax({        
       type: 'POST',
       url: 'tourFinderFunctions.php',
       'activities[]': activities
       success: function() {
            $('#lengthQuestion').fadeOut('slow');        
       }
});

Beachten Sie die Anführungszeichen um Aktivitäten []. Die Werte sind wie folgt verfügbar:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';
Chelista
quelle
0

Dies liegt daran, dass PHP Ihren Wert als Zeichenfolge liest. Wenn ich meine Daten nicht als Objekt übergeben möchte (wie in den vorherigen Antworten, die auch in Ordnung sind), mache ich dies einfach in meinem PHP:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

Die letzte Zeile teilt die Zeichenfolge nach jedem Komma in Bits auf. Jetzt ist $ activityArray auch ein Array. Es funktioniert auch, wenn kein Komma vorhanden ist (nur ein Element in Ihrem Javascript-Array).

Viel Spaß beim Codieren!

Weißdorn
quelle