2009-10-05 22 views
6

Mam wywołanie AJAX w następującym formacie:Przesyłaj tablice jako parametry z jQuery AJAX?

$.get('/controller/method/', 
    { 
    parameter1: value1, 
    parameter2: value2 
    }, 
    function(data) { 
    if (data) { 
    } 
    else { 
    } 
}); 

to możliwe, aby przekazać tablicę jako parametr?

parameter3: new Array(1, 2, 3) 
parameter4: new Array('one' => 1, 'two' => 2, 'three' => 3) 
+0

Próbowałeś robisz to jeszcze? –

+0

Tak, mam tylko dostęp do ostatniego parametru tablicy w skrypcie PHP, określając go jako np. $ _GET ['parameter3'] –

Odpowiedz

8

Prawdopodobnie będzie trzeba wymienić swoją zmienną jako "parametr3 []" przez wzgląd na PHP:

$.get('/controller/method/', 
    { 
    "parameter1": "value1", 
    "parameter2": "value2", 
    "parameter3[]": ["a","b","c"] 
    }, 
    function(data) { 
    if (data) { 
    } 
    else { 
    } 
}); 

$ _GET [ "parametr3"] pojawią się w PHP jako

Array 
(
    [0] => "a" 
    [1] => "b" 
    [2] => "c" 
) 
+0

Nice! Działa bardzo dobrze. Teraz nie muszę się martwić, czy moje wartości parametrów zawierają wartości separatora (np. Przecinki). Trochę dziwne, że trzeba podać nazwę zmiennej. –

+0

No cóż, poza pisaniem własnego deserializera z łańcuchem zapytań jest to standard i jedyny sposób na obsługę wielowartościowych danych wejściowych, takich jak pola wyboru i zaznaczenia. PHPland to naprawdę dziwne miejsce do życia. – codehead

+0

Używam tej metody również do regularnego przekazywania tablic – Manatax

0

Możliwe jest wysłanie dowolnego obiektu JSON za pomocą polecenia post ... nawet do kontrolera MVC. Najtrudniejszą częścią jest otrzymanie danych ... które mogą być potrzebne do deserializacji ręcznie na serwerze (w kontrolerze lub z filtrem JSON.)

This article (link) praktycznie wszystko, co musisz wiedzieć o deserializacji złożonego obiektu ... do parametru dla metody kontrolera MVC Przeczytaj to działa bardzo dobrze

+0

Ahhh! Właśnie dodałeś teraz, że robisz to w PHP, którego mój link ci nie pomoże. W przypadku PHP musisz przechwycić komunikat żądania, który będzie obiektem JSON, a następnie przekształcić go w obiekt. – Evildonald

0

Więc przede wszystkim, myślę, że jesteś mieszanie składni JavaScript i PHP jest to prawdopodobnie co oznaczało zrobić, aby wykazać przekazywania tablic.:

$.get('foo.htm', 
     { 
     parameter1: 'value1', 
     parameter2: 'value2', 
     parameter3: [1, 2, 3], 
     parameter4: {'one': 1, 'two': 2, 'three': 3} 
     }, 
     function(data) { 
     alert(data); 
     }); 

Co dziwne JQuery nie lubi zagnieżdżonego obiektu. ość ciąg tak:

foo.htm?parameter1=value1 
    &parameter2=value2 
    &parameter3=1 
    &parameter3=2 
    &parameter3=3 
    &parameter4=%5Bobject+Object%5D 

dla PHP przechodząc tam iz powrotem skomplikowanych obiektów, polecam szeregowania swój obiekt JavaScript stosując metodę JSON stringify De-szeregowania go na backend z json_decode.

Wygląda na to, że używasz jakiegoś szkieletu MVC. Jeśli to CodeIgniter i masz problemy z GET, należy rozważyć użycie tej metody pomocnika postJSON:

$.postJSON = function(url, data, callback) { 
    $.post(url, data, callback, "json"); 
}; 
0

Byłem w dół tej drogi przed. Dołącz swoją tablicę przecinkiem (lub cokolwiek charakter będzie najlepsze dla Twojego scenariusza) i przesłać go jako pojedynczy parametr ...

var arr = [5, "x", 25]; 
var parms = { 
    parameter1: "value1", 
    parameter2: arr.join(","); 
} 

A po stronie serwera, Twój „parameter2” zmienna post będzie wyglądać 5,x,25

Jest to łatwe rozwiązanie dla obu stron drutu.

+0

Rozwiązanie Josh Stodola przy użyciu metody join() działało idealnie. Dzięki! – pdelco