2009-10-05 32 views
6

Tôi có một cuộc gọi AJAX trong các định dạng sau:Vượt qua các mảng như các tham số với jQuery AJAX?

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

Có thể vượt qua một mảng như một tham số?

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

Các bạn đã thử làm nó chưa –

+0

Có, tôi chỉ có quyền truy cập tham số cuối cùng của mảng trong tập lệnh PHP, tham chiếu nó như, ví dụ: $ _GET ['parameter3'] –

Trả lời

8

Bạn có thể sẽ cần phải đặt tên biến của bạn là "parameter3 []" vì lợi ích của PHP:

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

$ _GET [ "parameter3"] sẽ xuất hiện trong PHP như

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

Tuyệt vời! Hoạt động rất tốt. Bây giờ tôi không phải lo lắng về việc liệu các giá trị tham số của tôi có chứa các giá trị tách (ví dụ như dấu phẩy) hay không. Một chút lạ khi phải báo giá tên biến. –

+0

Vâng, viết ngắn chuỗi truy vấn deserializer của riêng bạn là tiêu chuẩn - và cách duy nhất để xử lý các đầu vào có nhiều giá trị, như hộp kiểm và lựa chọn. PHPland thực sự là một nơi kỳ lạ để sống. – codehead

+0

Tôi thậm chí đã sử dụng phương pháp này cho mảng thông thường đi qua – Manatax

0

Có thể gửi bất kỳ đối tượng JSON nào thông qua lệnh đăng ... ngay cả đến bộ điều khiển MVC. Phần khó khăn là nhận được dữ liệu ... mà bạn có thể cần phải deserialize bằng tay tại máy chủ (hoặc trong bộ điều khiển hoặc với một bộ lọc JSON.

This article (link) khá nhiều cung cấp cho bạn mọi thứ bạn cần biết về deserializing một đối tượng phức tạp vào một tham số cho một phương pháp điều khiển MVC Đọc nó Nó hoạt động rất tốt

+0

Ahhh! Bạn chỉ cần thêm bây giờ rằng bạn đang làm điều này trong PHP, mà liên kết của tôi sẽ không giúp bạn. Đối với PHP, bạn cần phải chặn thông báo yêu cầu sẽ là đối tượng JSON của bạn và sau đó deserialize nó vào một đối tượng. – Evildonald

0

Vì vậy, trước hết, tôi nghĩ bạn đang trộn cú pháp JavaScript và PHP.Đây có lẽ là những gì bạn muốn làm để chứng minh các mảng truyền đi:

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

Rất kỳ lạ JQuery không thích đối tượng lồng nhau. chuỗi ery như thế này:

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

Đối với PHP qua lại đối tượng phức tạp, tôi khuyên bạn nên serializing đối tượng JavaScript bạn sử dụng một phương pháp JSON stringify và de-serializing nó trên backend với json_decode.

Ngoài ra, có vẻ như bạn đang sử dụng một số khung MVC. Nếu đó là CodeIgniter và bạn đang gặp sự cố với GET, hãy xem xét sử dụng phương thức trợ giúp postJSON này:

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

Tôi đã đi xuống con đường này trước đây. Tham gia mảng của bạn với một dấu phẩy (hoặc bất kỳ nhân vật sẽ làm việc tốt nhất cho kịch bản của bạn) và gửi nó như một tham số duy nhất ...

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

Và trên server-side, "argument2" hậu biến của bạn sẽ trông giống như 5,x,25

Đây là giải pháp dễ dàng cho cả hai mặt của dây.

+0

Giải pháp Josh Stodola sử dụng phương thức join() hoạt động hoàn hảo. Cảm ơn! – pdelco

Các vấn đề liên quan