Làm thế nào để nhận được biến "GET" từ yêu cầu trong JavaScript?Làm thế nào để nhận được thông số yêu cầu "GET" trong JavaScript?
jQuery hoặc YUI! có tính năng này được tích hợp sẵn không?
Làm thế nào để nhận được biến "GET" từ yêu cầu trong JavaScript?Làm thế nào để nhận được thông số yêu cầu "GET" trong JavaScript?
jQuery hoặc YUI! có tính năng này được tích hợp sẵn không?
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
Mã này không được giải mã url? –
@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
Không tốt hơn nếu chỉ cung cấp một đoạn mã? –
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
.
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. –
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.
Nếu bạn đã sử dụng jquery có một plugin jquery để xử lý này:
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");
Nguồn Cập nhật: https://github.com/allmarkedup/jQuery-URL-Parser
Câu trả lời hay, nhưng liên kết của bạn đã chết –
@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
Vì vậy, một plugin là bắt buộc? – JohnK
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()];
}
Thực sự thích phương pháp này. +1 – BenRacicot
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
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
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 =
là 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
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];
}
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)
thể trùng lặp của [Làm thế nào để lấy các thông số GET từ javascript?] (Http://stackoverflow.com/questions/5448545/how-to-retrieve-get-parameters-from-javascript) – Kirby