2013-04-07 39 views
10

Tôi có một hình thức sử dụng phương thức get và chứa một mảng:Nhận chuỗi truy vấn giá trị mảng trong Javascript

http://www.example.com?name[]=hello&name[]=world

Tôi đang cố gắng để lấy các giá trị mảng 'hello' và 'thế giới' sử dụng JavaScript hoặc jQuery.

Tôi đã xem xét các giải pháp tương tự trên Stack Overflow (ví dụ: How can I get query string values in JavaScript?) nhưng dường như chúng chỉ xử lý các thông số chứ không phải là mảng.

Có thể nhận giá trị mảng không?

+1

Câu trả lời http://stackoverflow.com/a/3855394/295783 trong liên kết mà bạn đăng tải sẽ làm việc trong trường hợp của bạn cũng vậy, trừ khi parms lặp lại theo đề nghị của bạn đề cập đến mảng và việc sử dụng [] – mplungjan

+1

Chỉ cần rõ ràng: URL không có khái niệm về * mảng *. Tất cả những gì bạn có là nhiều tham số có cùng tên. '[]' Thường được sử dụng cho các máy chủ PHP, sau đó sẽ tạo ra các mảng trong số các tham số này. Các ngôn ngữ khác (ví dụ: Python) có thể xử lý nhiều tham số có cùng tên (và không có '[]') tốt. –

+2

Từ câu hỏi bạn đã liên kết đến, bạn có thể thấy câu trả lời này hữu ích: http://stackoverflow.com/a/9362596/218196. –

Trả lời

11

Có bạn đi: http://jsfiddle.net/mm6Bt/1/

function getURLParam(key,target){ 
    var values = []; 
    if (!target) target = location.href; 

    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 

    var pattern = key + '=([^&#]+)'; 
    var o_reg = new RegExp(pattern,'ig'); 
    while (true){ 
     var matches = o_reg.exec(target); 
     if (matches && matches[1]){ 
      values.push(matches[1]); 
     } else { 
      break; 
     } 
    } 

    if (!values.length){ 
     return null; 
    } else { 
     return values.length == 1 ? values[0] : values; 
    } 
} 

var str = 'http://www.example.com?name[]=hello&name[]=world&var1=stam'; 

console.log(getURLParam('name[]',str)); 
console.log(getURLParam('var1',str)); 
+0

Cảm ơn rất nhiều, Adidi. Đó là hoàn hảo! :) – iltdev

+0

Bạn rất hoan nghênh ^^ – Adidi

+0

Sau rất nhiều khó khăn, tôi đã tìm ra rằng chúng ta cần phải thêm [] vào tên nếu nó là một mảng! có vẻ hiển nhiên bây giờ, nhưng bằng cách nào đó tôi lãng phí một giờ để nhận thấy nó. –