Przekazywanie tablicy JavaScript do PHP przez jQuery $ .ajax

79

Chcę manipulować tablicą JavaScript w PHP. Czy można coś takiego zrobić?

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

Działania to jednowymiarowa tablica, na przykład:

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

Skrypt nie kończy się, gdy próbuję ... Jak to naprawić?

krx
źródło

Odpowiedzi:

147
data: { activitiesArray: activities },

Otóż ​​to! Teraz możesz uzyskać do niego dostęp w PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?>
Valentin Golev
źródło
10
Dlaczego ta odpowiedź była tak trudna do znalezienia !? Dziękuję, właśnie tego potrzebowałem.
Vian Esterhuizen
Prosty jak haker! Dobra robota! Rozśmieszyłeś mnie z siebie: D.
Arashtad Ltd
12

Będziesz chciał zakodować swoją tablicę jako JSON przed jej wysłaniem, albo po prostu dostaniesz trochę śmieci na drugim końcu.

Ponieważ wysyłasz tylko tablicę, możesz po prostu zrobić:

data: { activities: activities }

który automatycznie skonwertuje tablicę za Ciebie.

Zobacz tutaj po szczegóły.

jvenema
źródło
11

Musisz przekształcić to w ciąg. Możesz to zrobić za pomocą metody stringify w bibliotece JSON2.

http://www.json.org/

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

Kod wyglądałby mniej więcej tak:

var myJSONText = JSON.stringify(myObject);

Więc

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

Stanie się:

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

Będziesz musiał zwrócić się do guru PHP, aby dowiedzieć się, jak sobie z tym poradzić na serwerze. Myślę, że inne odpowiedzi tutaj intymne rozwiązanie.

W podobny sposób można zwrócić dane z serwera. Oznacza to, że możesz zmienić go z powrotem w obiekt.

var myObject = JSON.parse(myJSONString);
James Wiseman
źródło
9

Wiem, że może być za późno, aby odpowiedzieć na to pytanie, ale to zadziałało dla mnie w świetny sposób:

  1. Stringify swój obiekt javascript (json) za pomocą var st = JSON.stringify(your_object);

  2. Przekaż swoje dane POST jako „ciąg” (być może używając jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Dekoduj swoje dane podczas przetwarzania po stronie serwera: $data = json_decode($_POST['data']);

To wszystko ... możesz swobodnie korzystać ze swoich danych.

Tablice wielowymiarowe i tablice pojedyncze są obsługiwane jak zwykłe tablice. Aby uzyskać do nich dostęp, wykonaj normalne czynności $foo[4].

Tablice asocjacyjne (obiekty javsacript) są obsługiwane jako obiekty (klasy) php. Aby uzyskać do nich dostęp po prostu zrób to jak klas: $foo->bar.

lu1s
źródło
2

Powinienem wyglądać tak:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
masterdany88
źródło
1

Użyj funkcji JQuery Serialize

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

Serializacja jest zwykle używana do przygotowania danych wejściowych użytkownika do wysłania na serwer. Zserializowane dane są w standardowym formacie, który jest zgodny z prawie wszystkimi językami programowania po stronie serwera i strukturami.

Gazzer
źródło
1

To zadziałało dla mnie:

$.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);
    }
});

A to dla twojego PHP :

$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}
I. Tyger
źródło
1

Skorzystaj z wbudowanej funkcjonalności PHP, dołączając operand tablicowy do żądanej nazwy zmiennej.

Jeśli dodamy wartości do tablicy JavaScript w następujący sposób:

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

Można go wysłać na serwer w następujący sposób:

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

Zwróć uwagę na cudzysłowy wokół działań []. Wartości będą dostępne w następujący sposób:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';
chelista
źródło
0

Dzieje się tak, ponieważ PHP odczytuje twoją wartość jako ciąg. Jeśli nie chcę przekazywać moich danych jako obiektu (jak w poprzednich odpowiedziach, które również są w porządku), po prostu robię to w moim PHP:

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

Ostatnia linia dzieli łańcuch na bity po każdym przecinku. Teraz $ activityArray jest również tablicą. Działa nawet, jeśli nie ma przecinka (tylko jeden element w tablicy javascript).

Miłego kodowania!

Głóg
źródło