nối vào url và làm mới trang


Câu trả lời:


162

cái này sẽ hoạt động (không được kiểm tra!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;

1
str.search (regex) nhanh hơn srt.indexOf (str2)
xavierm02

1
Và bạn nên đưa ra một ví dụ ull với tên biến và tham số biến với encodeURIComponent ().
xavierm02

Và ngay lập tức> -1, bạn nên sử dụng! == -1
xavierm02

8
Theo dõi điều này, làm thế nào có thể thêm một số logic rằng nếu tham số đã tồn tại trong url tôi cập nhật giá trị của nó thay vì thêm một tham số mới?
nghiệp dư

1
điều này sẽ loại bỏ neo (giá trị băm) khỏi url, nếu nó tồn tại, @am Nghiệp bạn có thể tìm thấy một chức năng thực hiện ở đây: stackoverflow.com/questions/486896/
Doug Molineux

143

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 += '&param=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.


11
Đối với trường hợp bạn biết đây sẽ là tham số duy nhất, bạn cũng có thể đặt tìm kiếm thay vì nối thêm vào đó:window.location.search = '?param=42';
Dave DuPlantis

1
Bạn đã làm rất tốt!! Cách chính xác, đơn giản và tối ưu hóa; nên đã được câu trả lời chấp nhận.
Rohit

Điều gì sẽ xảy ra nếu url của bạn là: www.mysite.com ... thì nó sẽ không tạo url: www.mysite.com & param = 42 sẽ cần "?" ký tự vì nó là tham số duy nhất trong url. Tôi thích câu trả lời của @Shlomi Komemi vì nó bao gồm 2 tình huống chính.
lớn hơn

1
@gTHERKing trình duyệt thêm dấu chấm hỏi, khi thêm tham số vào thuộc tính tìm kiếm của vị trí. Hãy thử nó trong bảng điều khiển trình duyệt của bạn.
Bo Frederiksen

1
@BoFrederiksen xấu của tôi, bạn thực sự đúng ... thật đáng tiếc về điều đó. "+ =" của thô ... đã bỏ lỡ điều đó. +1 từ tôi.
lớn hơn

70

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 + "&parameter=" + 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/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=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');

1
Tại sao không chỉ để sử dụng:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO

@ SébastienGarcia-Roméo Có, đó là một cách tiếp cận thú vị, và thực sự hợp lệ, tuy nhiên, có hai lý do tại sao chức năng được lập trình theo cách đó. 1. Để loại bỏ các tham số trùng lặp hiện có. 2. Để ghi đè giá trị của một tham số hiện có. Từ quan điểm này, bây giờ việc sử dụng indexOfcó thể giới thiệu sự phức tạp không cần thiết cho mã.
yeyo


2
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;
}

1

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+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

1

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(/\?|&amp;/);


Xin vui lòng gửi chỉnh sửa như vậy trong một bình luận hoặc đề xuất và chỉnh sửa. Họ không đảm bảo một câu trả lời riêng biệt.
JJ cho Minh bạch và Monica

1

Thử cái này

var url = ApiUrl(`/customers`);
  if(data){
   url += '?search='+data; 
  }
  else
  { 
      url +=  `?page=${page}&per_page=${perpage}`;
  }
  console.log(url);

0

Cũng thế:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

Chỉ cần một câu trả lời của Shlomi có thể sử dụng được trong bookmarklets

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.