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ć?
php
javascript
jquery
ajax
krx
źródło
źródło
Odpowiedzi:
data: { activitiesArray: activities },
Otóż to! Teraz możesz uzyskać do niego dostęp w PHP:
<?php $myArray = $_REQUEST['activitiesArray']; ?>
źródło
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.
źródło
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);
źródło
Wiem, że może być za późno, aby odpowiedzieć na to pytanie, ale to zadziałało dla mnie w świetny sposób:
Stringify swój obiekt javascript (json) za pomocą
var st = JSON.stringify(your_object);
Przekaż swoje dane POST jako „ciąg” (być może używając jQuery:
$.post('foo.php',{data:st},function(data){... });
$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
.źródło
Powinienem wyglądać tak:
$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer }, function(response, status, xhr) { alert("POST returned: \n" + response + "\n\n"); })
źródło
Użyj funkcji JQuery Serialize
http://docs.jquery.com/Ajax/serialize
źródło
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; }
źródło
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';
źródło
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!
źródło