Câu trả lời:
cái này sẽ hoạt động (không được kiểm tra!)
var url = window.location.href;
if (url.indexOf('?') > -1){
url += '¶m=1'
}else{
url += '?param=1'
}
window.location.href = url;
Ngắn hơn câu trả lời được chấp nhận, làm tương tự, nhưng giữ cho nó đơn giản:
window.location.search += '¶m=42';
Chúng tôi không phải thay đổi toàn bộ url, chỉ là chuỗi truy vấn, được gọi là thuộc tính tìm kiếm của vị trí.
Khi bạn đang gán một giá trị cho thuộc tính tìm kiếm, dấu hỏi sẽ được trình duyệt tự động chèn vào và trang được tải lại.
window.location.search = '?param=42';
Hầu hết các câu trả lời ở đây cho thấy rằng người ta nên nối (các) tham số vào URL, giống như đoạn mã sau hoặc một biến thể tương tự:
location.href = location.href + "¶meter=" + value;
Điều này sẽ làm việc khá tốt cho phần lớn các trường hợp.
Tuy nhiên
Theo ý kiến của tôi, đó không phải là cách chính xác để nối một tham số vào URL.
Vì cách tiếp cận được đề xuất không kiểm tra xem tham số đã được đặt trong URL chưa, nếu không cẩn thận, người ta có thể kết thúc bằng một URL rất dài với cùng một tham số được lặp lại nhiều lần. I E:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
tại thời điểm này là nơi các vấn đề bắt đầu. Cách tiếp cận được đề xuất có thể và sẽ tạo một URL rất dài sau khi làm mới nhiều trang, do đó làm cho URL không hợp lệ. Theo liên kết này để biết thêm thông tin về URL dài Độ dài tối đa của URL trong các trình duyệt khác nhau là bao nhiêu?
Đây là cách tiếp cận được đề xuất của tôi:
function URL_add_parameter(url, param, value){
var hash = {};
var parser = document.createElement('a');
parser.href = url;
var parameters = parser.search.split(/\?|&/);
for(var i=0; i < parameters.length; i++) {
if(!parameters[i])
continue;
var ary = parameters[i].split('=');
hash[ary[0]] = ary[1];
}
hash[param] = value;
var list = [];
Object.keys(hash).forEach(function (key) {
list.push(key + '=' + hash[key]);
});
parser.search = '?' + list.join('&');
return parser.href;
}
Với chức năng này, người ta sẽ phải làm như sau:
location.href = URL_add_parameter(location.href, 'param', 'value');
if(window.location.search.indexOf('¶m=') == -1) {window.location.search += '¶m=1';}
indexOf
có thể giới thiệu sự phức tạp không cần thiết cho mã.
function gotoItem( item ){
var url = window.location.href;
var separator = (url.indexOf('?') > -1) ? "&" : "?";
var qs = "item=" + encodeURIComponent(item);
window.location.href = url + separator + qs;
}
Phiên bản compat khác
function gotoItem( item ){
var url = window.location.href;
url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
window.location.href = url;
}
Vui lòng kiểm tra mã dưới đây:
/*Get current URL*/
var _url = location.href;
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'¶m='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;
Một sửa lỗi nhỏ cho câu trả lời chu đáo của @ yeyo ở trên.
Thay đổi:
var parameters = parser.search.split(/\?|&/);
Đến:
var parameters = parser.search.split(/\?|&/);
Thử cái này
var url = ApiUrl(`/customers`);
if(data){
url += '?search='+data;
}
else
{
url += `?page=${page}&per_page=${perpage}`;
}
console.log(url);