Cách tải lại trang bằng JavaScript


875

Làm cách nào tôi có thể tải lại trang bằng JavaScript?

Tôi cần một phương pháp hoạt động trong tất cả các trình duyệt.

Câu trả lời:


948

JavaScript 1.0

window.location.href = window.location.pathname + window.location.search + window.location.hash;
// creates a history entry

JavaScript 1.1

window.location.replace(window.location.pathname + window.location.search + window.location.hash);
// does not create a history entry

JavaScript 1.2

window.location.reload(false); 
// If we needed to pull the document from
//  the web-server again (such as where the document contents
//  change dynamically) we would pass the argument as 'true'.

82
'true' sẽ buộc trang tải lại từ máy chủ. 'false' sẽ tải lại từ bộ đệm, nếu có.
barro32

3
.reload(true)được thêm vào lịch sử? Nếu vậy, làm thế nào để tránh điều đó với tải lại?
johnt doanh nhân

13
Đây là một liên kết đến các tài liệu: developer.mozilla.org/en-US/docs/Web/API/window.location
Justin Ethier

1
Đây là câu trả lời tốt nhất và nên được đặt lên hàng đầu. Vấn đề của tôi với các chức năng khác là chúng không làm mới trang bằng nội dung từ máy chủ và sử dụng bộ đệm thay vì vậy giải pháp JavaScript 1.2 là giải pháp tốt nhất và duy nhất cho tôi.
Ryan Coolwebs 11/03/2016

8
.reload (true) hoặc .reload (false) không được dùng theo IDE của tôi và github.com/Microsoft/TypeScript/issues/28898 - bây giờ nên sử dụng .reload ()
danday74

389
location.reload();

Xem trang MDN này để biết thêm thông tin.

Nếu bạn đang làm mới sau onclickđó thì bạn sẽ cần phải trả lại sai ngay sau đó

location.reload();
return false;

22
sự khác biệt giữa location.reload()và là window.location.reload()gì?
Raptor

53
@ShivanRaptor Thông thường không có, trong các trình duyệt web bối cảnh, locationcũng giống như window.locationnhư windowlà đối tượng toàn cầu.
Lekensteyn

1
đừng quên return false;nếu gọi nó từ một onclick trong một liên kết.
Rimian

2
Tôi thích sử dụng window.location.reload();để dễ đọc hơn, vì locationcó thể là một biến cục bộ - trong khi bạn thường tránh các biến của tên window.
Yeti

219

Dưới đây là 535 cách để tải lại trang bằng JavaScript , cách dễ nhất location = location.

Đây là 50 đầu tiên:

location = location
location = location.href
location = window.location
location = self.location
location = window.location.href
location = self.location.href
location = location['href']
location = window['location']
location = window['location'].href
location = window['location']['href']
location = window.location['href']
location = self['location']
location = self['location'].href
location = self['location']['href']
location = self.location['href']
location.assign(location)
location.replace(location)
window.location.assign(location)
window.location.replace(location)
self.location.assign(location)
self.location.replace(location)
location['assign'](location)
location['replace'](location)
window.location['assign'](location)
window.location['replace'](location)
window['location'].assign(location)
window['location'].replace(location)
window['location']['assign'](location)
window['location']['replace'](location)
self.location['assign'](location)
self.location['replace'](location)
self['location'].assign(location)
self['location'].replace(location)
self['location']['assign'](location)
self['location']['replace'](location)
location.href = location
location.href = location.href
location.href = window.location
location.href = self.location
location.href = window.location.href
location.href = self.location.href
location.href = location['href']
location.href = window['location']
location.href = window['location'].href
location.href = window['location']['href']
location.href = window.location['href']
location.href = self['location']
location.href = self['location'].href
location.href = self['location']['href']
location.href = self.location['href']
...

84
Điều đó thật thú vị, nhưng bây giờ tôi đang bối rối
Arun Prasad ES

14
Nó cũng nêu bật tính đặc thù của Javascript :)
Jeremy Thille 17/03/2017

53
Cá nhân tôi không thích câu trả lời này vì điều này chỉ cho thấy một cách thực hiện khác nhau để thay đổi địa điểm. Những cách này là hoán vị của các cách khác nhau để thực thi một chức năng hoặc truy cập một thuộc tính trong javascript. KHÔNG cách khác nhau để tải lại một trang.
Joshua Behlings

42
Chắc chắn còn có nhiều hơn, như:window.window.window['window'].location = window['window'].window['window']['window']['window']['window']['window']['window']['location']
Renato

85

Bạn có thể thực hiện nhiệm vụ này bằng cách sử dụng window.location.reload();. Vì có nhiều cách để làm điều này nhưng tôi nghĩ đó là cách thích hợp để tải lại cùng một tài liệu với JavaScript. Đây là lời giải thích

window.locationĐối tượng JavaScript có thể được sử dụng

  • để lấy địa chỉ trang hiện tại (URL)
  • để chuyển hướng trình duyệt đến một trang khác
  • để tải lại cùng một trang

window: trong JavaScript biểu thị một cửa sổ mở trong trình duyệt.

location: trong JavaScript chứa thông tin về URL hiện tại.

Đối locationtượng giống như một mảnh của windowđối tượng và được gọi lên thông qua window.locationtài sản.

location đối tượng có ba phương thức:

  1. assign(): được sử dụng để tải một tài liệu mới
  2. reload(): được sử dụng để tải lại tài liệu hiện tại
  3. replace(): được sử dụng để thay thế tài liệu hiện tại bằng tài liệu mới

Vì vậy, ở đây chúng ta cần sử dụng reload(), bởi vì nó có thể giúp chúng ta tải lại cùng một tài liệu.

Vì vậy, sử dụng nó như thế nào window.location.reload();.

Bản demo trực tuyến trên jsfiddle

Để yêu cầu trình duyệt của bạn truy xuất trang trực tiếp từ máy chủ chứ không phải từ bộ đệm, bạn có thể truyền truetham số cho location.reload(). Phương pháp này tương thích với tất cả các trình duyệt chính, bao gồm IE, Chrome, Firefox, Safari, Opera.


2
À ha! replace()hóa ra là giải pháp tôi đang tìm kiếm vì tôi cần tải lại trang của mình với một chút thay đổi trong chuỗi truy vấn.
Bernard Hymmen

Từ w3schools: "Sự khác biệt giữa gán () và thay thế (), là thay thế () xóa URL của tài liệu hiện tại khỏi lịch sử tài liệu, nghĩa là không thể sử dụng nút" quay lại "để điều hướng quay lại tài liệu gốc. "
pasaba por aqui

54

Thử:

window.location.reload(true);

Tham số được đặt thành 'true' tải lại một bản sao mới từ máy chủ. Để nó ra sẽ phục vụ trang từ bộ đệm.

Thông tin thêm có thể được tìm thấy tại MSDN và trong tài liệu Mozilla .


1
Điều gì xảy ra nếu tôi muốn làm mới một trang web bên ngoài www.xyz.com/abc?
DoIt

@Dev: Bạn nên thử với "thay thế" như đã đề cập sau này
Jean Paul AKA el_vete 30/03/2017

@Orane: Tôi thích cả sự đơn giản và tháo vát của câu trả lời này, vì đưa ra nhiều lựa chọn chỉ để đáp ứng yêu cầu của op, nói rằng, cảm ơn bạn đã cung cấp một liên kết tham chiếu thẩm quyền trong tình huống này, để tham khảo trong tương lai như mỗi trình duyệt có công cụ JS riêng để kết xuất ... Tôi nghĩ rằng câu hỏi rất chung chung và nó nên phụ thuộc vào việc bạn muốn làm điều đó vì mục đích tham khảo web nào khác: " phpied.com/files/location-location/location- location.html "có thể đáp ứng hoàn toàn op cho câu hỏi này. Tuy nhiên, điều này đã giúp tôi;)
Jean Paul AKA el_vete 30/03/2017

1
Điều này có còn đúng không? Cả hai liên kết này đều không đề cập đến bất kỳ tham số nào để tải lại.
Rüdiger Schulz

51

Tôi đã tìm kiếm một số thông tin liên quan đến tải lại trên các trang được truy xuất với các yêu cầu POST, chẳng hạn như sau khi gửi method="post"biểu mẫu.

Để tải lại trang giữ dữ liệu POST, sử dụng:

window.location.reload();

Để tải lại trang loại bỏ dữ liệu POST (thực hiện yêu cầu GET), sử dụng:

window.location.href = window.location.href;

Hy vọng điều này có thể giúp những người khác đang tìm kiếm thông tin tương tự.


Cảm ơn câu trả lời bao gồm một tài liệu tham khảo để tải lại một tài liệu được lấy với một POSTyêu cầu.
Christopher Schultz

Phân biệt tốt giữa GETPOSTphương pháp
Hassan Baig

Câu trả lời này quá xa vời!
Greg Randall

1
window.location.href = window.location.hrefkhông tải lại trang nếu url hiện tại chứa a #. Bạn có thể loại bỏ hàm băm nếu bạn không cần nó window.location.href = window.location.href.split('#')[0];.
Roland Starke


37

Điều này làm việc cho tôi:

function refresh() {    
    setTimeout(function () {
        location.reload()
    }, 100);
}

http://jsfiddle.net/umerqureshi/znruyzop/


Điều này, với tôi, là tốt hơn, vì nó tránh được một điều kiện vòng lặp ở phía máy chủ
ILMostro_7

1
Tôi đặc biệt đánh giá cao việc bao gồm chức năng hết thời gian vì tôi có một tin nhắn tôi vẫn muốn xem trước khi làm mới xảy ra. Thanh danh!
Matt Cremeens

bạn có thể đặt các giá trị khác nhau làm đối số thứ hai cho hàm setTimeout nhưng nó sẽ không hoạt động, tải lại sẽ xảy ra ngay lập tức, làm thế nào để giải quyết nó?
O.Kuz

1
@ O.Kuz đừng nghĩ vậy. giả sử nếu bạn đặt giá trị thành 5000ms thì tải lại sẽ xảy ra sau 5 giây. thấy jsfiddle.net/umerqureshi/znruyzop/446
Umer

1
Tôi cần tìm một lỗi trong mã của tôi) Cảm ơn rất nhiều!
O.Kuz

15

Nếu bạn đặt

window.location.reload(true);

ở đầu trang của bạn không có điều kiện nào khác đủ điều kiện tại sao mã đó chạy, trang sẽ tải và sau đó tiếp tục tải lại cho đến khi bạn đóng trình duyệt của mình.


Vâng, hoặc cho đến khi bạn mở một URL khác. Nó có thể phụ thuộc vào khả năng xử lý tải trang liên tục của trình duyệt.
adamdunson

tốt mà phụ thuộc vào nơi bạn đặt nó như bạn đã nêu chính xác. Ở đây chúng tôi chỉ đề cập rằng có lẽ thẻ neo không phải là yếu tố trực quan để thực hiện một hành động như tải lại trang. Đề xuất: Chúng tôi như vậy dựa vào một đối tượng UI khác làm mục tiêu để thực hiện một sự kiện onclick. Bạn có thể làm điều này trong jQuery sau khi trang được tải bằng cách nhắm mục tiêu một div, ví dụ nếu bạn trang trí nó bằng css .. Nó phụ thuộc vào những gì bạn muốn làm với nó. Trong bối cảnh đó, một nút chứ không phải là nút loại đầu vào. Nếu chúng tôi không có kế hoạch chuyển một đối số cho ứng dụng phụ trợ thì có vẻ phù hợp hơn.
Jean Paul AKA kéo dài

IE: <button onclick = "javascript: window.location.reload (true);"
Jean Paul AKA kéo dài

11
location.href = location.href;

5
Các trình duyệt hiện đại bỏ qua điều này vì href không thay đổi nên không cần tải lại. Bạn chỉ nên sử dụng điều này làm chuyển đổi dự phòng cho các trình duyệt cũ mà không tải lại: (location.reload? Location.reload (): location.href = location.href)
Radek Pech

@RadekPech Những trình duyệt cũ hơn không có location.reload()?
Matthias

8

Để làm cho nó dễ dàng và đơn giản, sử dụng location.reload(). Bạn cũng có thể sử dụng location.reload(true)nếu bạn muốn lấy một cái gì đó từ máy chủ.


8

Sử dụng một nút hoặc chỉ đặt nó trong thẻ "a" (neo):

<input type="button" value="RELOAD" onclick="location.reload();" />

Hãy thử những thứ này cho các nhu cầu khác:

Location Objects has three methods --

assign() Used to load a new document
reload() Used to reloads the current document.
replace() Used to replace the current document with a new one

1
thú vị ... còn <button> </ button> thì sao? hoạt động như nhau, phải không?
Jean Paul AKA kéo dài

1
Nó đã làm việc như một nét duyên dáng! Xem câu trả lời của tôi dưới đây :) Cảm ơn
Jean Paul AKA el_vete


4

Trang tải lại tự động sau 20 giây.

<script>
    window.onload = function() {
        setTimeout(function () {
            location.reload()
        }, 20000);
     };
</script>

4

Cảm ơn bạn, bài đăng này rất hữu ích, không chỉ tải lại trang với câu trả lời được đề xuất mà còn cho tôi ý tưởng đặt biểu tượng UI UI vào một nút:

<button style="display:block; vertical-align:middle; height:2.82em;"
        title="Cargar nuevamente el código fuente sin darle un [Enter] a la dirección en la barra de direcciones"
        class="ui-state-active ui-corner-all ui-priority-primary" 
        onclick="javascript:window.location.reload(true);">
    <span style="display:inline-block;" class="ui-icon ui-icon-refresh"></span>
    &nbsp;[<b>CARGAR NUEVAMENTE</b>]&nbsp;
</button>

Được chỉnh sửa để hiển thị như thế nào khi được đưa vào một dự án

2016/07/02

Tôi xin lỗi vì đây là một dự án cá nhân ngụ ý sử dụng jQuery UI, Themeroller, khung biểu tượng, các phương thức như các tab jQuery, nhưng nó bằng tiếng Tây Ban Nha;)


@Peter Mortensen: Cảm ơn bạn đã chỉnh sửa, nguyên mẫu dự án đó đã được thực hiện cho trường đại học, vì vậy nó cần phải bằng tiếng Tây Ban Nha tại screencaptures kèm theo .. tôi xin lỗi vì điều đó..Tất nhiên, cần phải có một số lõi liên quan đến giao diện người dùng jQuery các phụ thuộc để làm cho nó hòa trộn với nhau như: --- ví dụ: tiện ích ThemeRoller jqueryui.com/themeroller và các plugin như: plugins.jquery.com/qTip2 , datatables.net .. chính thư viện jQuery, v.v. nhưng hành động đã được thực hiện dựa trên một số câu trả lời ở trên: onclick = "javascript: window.location.reload (true);">!
Jean Paul AKA vào

3

Điều này sẽ làm việc:

window.location.href = window.location.href.split( '#' )[0];

hoặc là

var x = window.location.href;
x = x.split( '#' );
window.location.href = x[0];

Tôi thích điều này vì những lý do sau:

  • Xóa phần sau dấu #, đảm bảo trang tải lại trên các trình duyệt không tải lại nội dung có phần đó.
  • Nó không hỏi bạn nếu muốn đăng lại nội dung cuối cùng nếu gần đây bạn gửi biểu mẫu.
  • Nó nên hoạt động ngay cả trên hầu hết các trình duyệt gần đây. Đã thử nghiệm trên Firefox và Chrome kéo dài.

Ngoài ra, bạn có thể sử dụng phương thức chính thức gần đây nhất cho nhiệm vụ này

window.location.reload()


2

Phương thức reload () được sử dụng để tải lại tài liệu hiện tại.

Phương thức reload () thực hiện giống như nút tải lại trong trình duyệt của bạn.

Theo mặc định, phương thức reload () tải lại trang từ bộ đệm, nhưng bạn có thể buộc nó tải lại trang từ máy chủ bằng cách đặt tham số forceGet thành true: location.reload (true).

        location.reload();

-3

Bạn chỉ có thể sử dụng

window.location=document.URL

trong đó document.URL lấy URL trang hiện tại và window.location tải lại nó.


2
Các trình duyệt hiện đại bỏ qua điều này vì href không thay đổi nên không cần tải lại. Bạn chỉ nên sử dụng điều này làm chuyển đổi dự phòng cho các trình duyệt cũ mà không tải lại: (location.reload? Location.reload (): location = document.URL)
Radek Pech
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.