2009-05-06 33 views

Trả lời

151

Tất cả dữ liệu được phát hành theo

window.location.search 

bạn phải phân tích chuỗi, ví dụ.

function get(name){ 
    if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search)) 
     return decodeURIComponent(name[1]); 
} 

chỉ cần gọi hàm có tên biến GET làm tham số, ví dụ:

get('foo'); 

chức năng này sẽ trả về giá trị biến hoặc không xác định nếu biến không có giá trị hoặc không tồn tại

+0

Mã này không được giải mã url? –

+0

@Daniel Silveira: có, nó có thể/nên giải mã giá trị (và mã hóa tên). Sẽ không chỉnh sửa bài đăng của tôi sau vài phút – Rafael

+0

Không tốt hơn nếu chỉ cung cấp một đoạn mã? –

1

Bạn có thể phân tích cú pháp URL của trang hiện tại để nhận các tham số GET. URL có thể được tìm thấy bằng cách sử dụng location.href.

+0

Note rằng điều này không hoàn toàn đáng tin cậy vì máy chủ có thể đã chuyển hướng bạn đến nơi khác. Nhưng đó là điều tốt nhất bạn có thể làm. –

5

Bạn có thể sử dụng URL để nhận các biến GET. Cụ thể, window.location.search cung cấp mọi thứ sau (và bao gồm) dấu '?'. Bạn có thể đọc thêm về window.location here.

34

Bạn có thể sử dụng jquery.url tôi đã làm như thế này:

var xyz = jQuery.url.param("param_in_url"); 

Check the source code

Nguồn Cập nhật: https://github.com/allmarkedup/jQuery-URL-Parser

+0

Câu trả lời hay, nhưng liên kết của bạn đã chết –

+0

@Adam nó sẽ xuất hiện như vậy. Tôi nghĩ rằng đây là URL được cập nhật: https://github.com/allmarkedup/jQuery-URL-Parser Tìm kiếm trên Google trên Mark Perkins jquery.url đã dẫn tôi đến bản cập nhật. Tôi có nguồn từ khi tôi đăng câu trả lời này nếu bạn cần nó. – Kaos

+2

Vì vậy, một plugin là bắt buộc? – JohnK

10

Chỉ cần đặt hai xu của tôi trong, nếu bạn muốn một đối tượng chứa tất cả các yêu cầu

function getRequests() { 
    var s1 = location.search.substring(1, location.search.length).split('&'), 
     r = {}, s2, i; 
    for (i = 0; i < s1.length; i += 1) { 
     s2 = s1[i].split('='); 
     r[decodeURIComponent(s2[0]).toLowerCase()] = decodeURIComponent(s2[1]); 
    } 
    return r; 
}; 

var QueryString = getRequests(); 

//if url === "index.html?test1=t1&test2=t2&test3=t3" 
console.log(QueryString["test1"]); //logs t1 
console.log(QueryString["test2"]); //logs t2 
console.log(QueryString["test3"]); //logs t3 

Note, chìa khóa cho từng lấy param được thiết lập để chữ thường. Vì vậy, tôi đã thực hiện một chức năng trợ giúp. Vì vậy, bây giờ nó không phân biệt chữ hoa chữ thường.

function Request(name){ 
    return QueryString[name.toLowerCase()]; 
} 
+1

Thực sự thích phương pháp này. +1 – BenRacicot

0

Một bản đồ-giảm giải pháp:

var urlParams = location.search.split(/[?&]/).slice(1).map(function(paramPair) { 
     return paramPair.split(/=(.+)?/).slice(0, 2); 
    }).reduce(function (obj, pairArray) {    
     obj[pairArray[0]] = pairArray[1]; 
     return obj; 
    }, {}); 

Cách sử dụng:

For url: http://example.com?one=1&two=2 
console.log(urlParams.one) // 1 
console.log(urlParams.two) // 2 
+0

Bạn có thể giải thích tại sao bạn sử dụng giải pháp giảm bản đồ cho điều này? Theo tôi hiểu, map-reduce hiệu quả khi xử lý các tập dữ liệu thực sự lớn. Vì đây chỉ là một yêu cầu HTTP, tôi không thấy điểm sử dụng giải pháp giảm bản đồ. – JorgeGRC

3

Hôm nay tôi cần để có được các thông số yêu cầu của trang thành một mảng kết hợp vì vậy tôi đặt lại với nhau sau đây, với một chút help từ myfriends. Nó cũng xử lý các thông số mà không cần =true.

Với một ví dụ:

// URL: http://www.example.com/test.php?abc=123&def&xyz=&something%20else 

var _GET = (function() { 
    var _get = {}; 
    var re = /[?&]([^=&]+)(=?)([^&]*)/g; 
    while (m = re.exec(location.search)) 
     _get[decodeURIComponent(m[1])] = (m[2] == '=' ? decodeURIComponent(m[3]) : true); 
    return _get; 
})(); 

console.log(_GET); 
> Object {abc: "123", def: true, xyz: "", something else: true} 
console.log(_GET['something else']); 
> true 
console.log(_GET.abc); 
> 123 
0

Chức năng ở đây trả về tham số theo tên. Với những thay đổi nhỏ, bạn sẽ có thể trả lại url cơ sở, tham số hoặc neo.

function getUrlParameter(name) { 
    var urlOld   = window.location.href.split('?'); 
    urlOld[1]   = urlOld[1] || ''; 
    var urlBase   = urlOld[0]; 
    var urlQuery  = urlOld[1].split('#'); 
    urlQuery[1]   = urlQuery[1] || ''; 
    var parametersString = urlQuery[0].split('&'); 
    if (parametersString.length === 1 && parametersString[0] === '') { 
     parametersString = []; 
    } 
    // console.log(parametersString); 
    var anchor   = urlQuery[1] || ''; 

    var urlParameters = {}; 
    jQuery.each(parametersString, function (idx, parameterString) { 
     paramName = parameterString.split('=')[0]; 
     paramValue = parameterString.split('=')[1]; 
     urlParameters[paramName] = paramValue; 
    }); 
    return urlParameters[name]; 
} 
2

hãy thử mã bên dưới, nó sẽ giúp bạn lấy thông số GET từ url. for more details.

var url_string = window.location.href; // www.test.com?filename=test 
    var url = new URL(url_string); 
    var paramValue = url.searchParams.get("filename"); 
    alert(paramValue) 
Các vấn đề liên quan