Pytanie Jak mogę odświeżyć stronę za pomocą jQuery?


Jak mogę odświeżyć stronę za pomocą jQuery?


2049
2018-03-23 11:55


pochodzenie


Ponieważ jQuery jest strukturą javascript dla łatwej manipulacji DOM i wiązania zdarzeń, poleciłbym poprosić o javascript zamiast jQuery. - WoIIe
Nie potrzebujesz do tego jQuery. - Stardust
Bardziej istotne niż kiedykolwiek: needsmorejquery.com - K_7


Odpowiedzi:


Posługiwać się location.reload():

$('#something').click(function() {
    location.reload();
});

The reload() funkcja przyjmuje opcjonalny parametr, który można ustawić na true wymusić przeładowanie z serwera zamiast z pamięci podręcznej. Domyślny parametr to false, więc domyślnie strona może zostać przeładowana z pamięci podręcznej przeglądarki.


3321
2018-03-23 11:57



To nie działa dla mnie. To działało jednak: window.location.href = window.location.href; - Yster
To nie działa dla mnie. window.location.href=window.location.href; i location.href=location.href; pracował. - Travis
window.location.reload(true); będzie twarde odświeżanie, w przeciwnym razie domyślnie będzie to fałsz - Sagar Naliyapara
To działa, ale ma niewielkie opóźnienie - mindmyweb
@Sagar N, działa to również dla mnie. Dziękuję Ci. Ciężko próbowałem przez ostatnie kilka dni z innym podejściem, ale twoje rozwiązanie uratowało mnie. - Ludus H


To powinno działać we wszystkich przeglądarkach, nawet bez jQuery:

location.reload();

410
2018-03-23 11:57





Tam są wielokrotność nieograniczone sposoby odświeżania strony za pomocą JavaScript:

  1. location.reload()
  2. history.go(0)
  3. location.href = location.href
  4. location.href = location.pathname
  5. location.replace(location.pathname)
  6. location.reload(false) 

    Jeśli potrzebujemy wyciągnąć dokument z    ponownie serwer WWW (np. gdzie znajduje się zawartość dokumentu    zmiana dynamiczna) przekazalibyśmy argument jako true.

Możesz kontynuować tworzenie listy:

var methods = [
  "location.reload()",
  "history.go(0)",
  "location.href = location.href",
  "location.href = location.pathname",
  "location.replace(location.pathname)",
  "location.reload(false)"
];

var $body = $("body");
for (var i = 0; i < methods.length; ++i) {
  (function(cMethod) {
    $body.append($("<button>", {
      text: cMethod
    }).on("click", function() {
      eval(cMethod); // don't blame me for using eval
    }));
  })(methods[i]);
}
button {
  background: #2ecc71;
  border: 0;
  color: white;
  font-weight: bold;
  font-family: "Monaco", monospace;
  padding: 10px;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.5s ease;
  margin: 2px;
}
button:hover {
  background: #27ae60;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


345
2018-06-23 09:47



+1 dla listy i jsfiddle. Mam pytanie, w jsfiddle 1 i 6 sprawię, że wygenerowana strona zniknie na chwilę po ponownym załadowaniu, a 2-5 sprawi, że przeładowanie strony będzie "niezauważalne". W narzędziu programisty w przeglądarce Chrome widzę, że strona jest odtwarzana, ale czy możesz wyjaśnić, że proces odświeżania jest inny? Proszę. Z góry dziękuję. - Cԃաԃ
@ Cԃ ա ԃ Nie widzę różnicy ... Może bufor jest problemem? Wkrótce się obejrzę. - Ionică Bizău
1 i 6 (reload()/(false)) są wolniejsze. hmmm. ciekawy. :) i 1 i 6 są takie same jak reload()Domyślnym parametrem jest false. - Cԃաԃ
location.href = location.href jest to, z czego zwykle korzystam, ale dzięki za inne. Bardzo przydatne! +1 - Amal Murali
@ Cԃ ա ԃ W końcu mogę odtworzyć to, co widzisz i zapytałem tutaj. - Ionică Bizău


Wiele sposobów zadziała, jak przypuszczam:

  • window.location.reload();
  • history.go(0);
  • window.location.href=window.location.href;

183
2018-03-23 11:58



To window.location.href=window.location.href; zrobi nic jeśli twój URL ma # / hashbang na końcu example.com/something#blah: - AaronLS
Na wypadek, gdyby ktoś zastanawiał się, jaka jest różnica między location.reload() i history.go(0) jest: nie ma. Odpowiednia sekcja specyfikacji HTML 5 pod adresem w3.org/TR/html5/browsers.html#dom-history-go wyraźnie dyktuje, że są one równoważne: "Kiedy go(delta) metoda jest wywoływana, jeśli argument metody został pominięty lub ma wartość zero, agent użytkownika musi działać tak, jak gdyby location.reload() Metoda została nazwana zamiast tego. " - Mark Amery
Jedynym, który pracował dla mnie był ten: window.location.href = window.location.href; - Yster


Aby ponownie załadować stronę za pomocą jQuery, wykonaj następujące czynności:

$.ajax({
    url: "",
    context: document.body,
    success: function(s,x){
        $(this).html(s);
    }
});

Podejście, którego używałem, to Ajax jQuery. Przetestowałem to Chrom 13. Następnie wstawiam kod do programu obsługi, który uruchomi przeładowanie. The URL jest "", co znaczy ta strona.


114
2017-09-30 11:00



Downvoting. To naprawdę nie odpowiada na pytanie, ale zamiast tego pokazuje, jak zamienić kod HTML strony na odpowiedź Ajax. Różni się to od ponownego wczytania strony: na przykład pracuję nad sytuacją, w której to rozwiązanie nie rozwiązałoby pierwotnego problemu. - Marnen Laibow-Koser
Jednym z problemów z ponownym załadowaniem całego takiego HTML jest ręczne wywoływanie zdarzeń onload / ready i złagodzenie nadpisywania wcześniej zadeklarowanych zmiennych, których stan możesz zachować po odświeżeniu. - PassKit
O ile nie jesteś bardzo ostrożny z tym kodem będzie prowadzić do wycieków pamięci, do których dołączono programy obsługi zdarzeń i tym podobne, bez odłączania ich przed zastąpieniem kodu, do którego są przyłączone. - Daniel Llewellyn
Używam tego do ponownego ładowania naszego pulpitu co sekundę, zero migotania! To kometa biednego człowieka / json api. Dzięki @DanielLlewellyn et al. dla ostrzeżeń. - William Entriken
Kilka osób zauważyło, że takie podejście jest przydatne do odświeżenia tylko części strony. Nie jest. Myślę, że ci ludzie nie rozumieją context parametr z $.ajax i oczekując, że w jakiś sposób wykona jakąś magię. Wszystko, co robi, to jest Ustaw this wartość funkcji zwrotnych. Ajax do adresu URL "" trafi w adres URL, w którym aktualnie się znajdujesz, dzięki czemu zwykle ładuje kompletny kod HTML (w tym <html> i <head> i <body>) i nic w tej odpowiedzi nie odfiltrowuje rzeczy, których nie chcesz. - Mark Amery


Jeśli bieżąca strona została załadowana przez żądanie POST, możesz użyć

window.location = window.location.pathname;

zamiast

window.location.reload();

bo window.location.reload() poprosi o potwierdzenie, jeśli zostanie wywołane na stronie, która została załadowana przez żądanie POST.


97
2018-06-22 11:58



Spowoduje to jednak utratę querystringu, podczas gdy window.location = window.location nie będzie - mrmillsy
@mrmillsy window.location = window.location jest także niedoskonały; nie robi nic, jeśli w bieżącym adresie URL znajduje się fragid (hashbang). - Mark Amery


Pytanie powinno brzmieć:

Jak odświeżyć stronę za pomocą JavaScript

window.location.href = window.location.href; //This is a possibility
window.location.reload(); //Another possiblity
history.go(0); //And another

Jesteś rozpieszczany przez wybór.


55
2018-03-23 12:01





Możesz użyć

location.reload(forceGet)

forceGet jest wartością logiczną i opcjonalną.

Wartością domyślną jest false, co powoduje ponowne załadowanie strony z pamięci podręcznej.

Ustaw ten parametr na true, jeśli chcesz zmusić przeglądarkę do pobrania strony z serwera, aby pozbyć się pamięci podręcznej.

Lub tylko

location.reload()

jeśli chcesz szybko i łatwo z buforowaniem.


48
2017-07-25 14:27



MDN do tego: developer.mozilla.org/en-US/docs/Web/API/Location/reload - Max Heiber


Trzy podejścia z różnymi zachowaniami związanymi z pamięcią podręczną:

  • location.reload(true)

    W przeglądarkach, które implementują forcedReload parametr z location.reload(), ładuje ponownie, pobierając świeżą kopię strony i wszystkie jej zasoby (skrypty, arkusze stylów, obrazy itp.). Nie będzie służyć każdy zasoby z pamięci podręcznej - pobiera świeże kopie z serwera bez wysyłania ich if-modified-since lub if-none-match nagłówki w żądaniu.

    Równoważny dla użytkownika, który "twarde przeładowanie" w przeglądarkach, gdzie to możliwe.

    Zwróć uwagę true do location.reload() jest obsługiwany w Firefoksie (patrz MDN) i Internet Explorer (patrz MSDN), ale nie jest obsługiwany uniwersalnie i nie jest częścią specyfikacja W3 HTML 5, ani szkic W3 HTML 5.1 spec, ani WHATWG HTML Living Standard.

    W nieobsługiwanych przeglądarkach, takich jak Google Chrome, location.reload(true) zachowuje się tak samo jak location.reload().

  • location.reload() lub location.reload(false)

    Ponownie ładuje stronę, pobierając nową, niezamkniętą w pamięci kopię samego HTML strony i wykonując RFC 7234 żądania rewalidacji dla wszelkich zasobów (takich jak skrypty), które przeglądarka ma w pamięci podręcznej, nawet jeśli są świeży czy RFC 7234 zezwala przeglądarce na obsługiwanie ich bez ponownej walidacji.

    Dokładnie w jaki sposób przeglądarka powinna wykorzystywać swoją pamięć podręczną podczas wykonywania location.reload()połączenie nie jest określone lub udokumentowane, o ile wiem; Ustaliłem powyższe zachowanie eksperymentalnie.

    Jest to odpowiednik dla użytkownika po prostu naciśnięcie przycisku "odśwież" w przeglądarce.

  • location = location (lub nieskończenie wiele innych możliwych technik, które wymagają przypisania location lub do jego właściwości)

    Działa tylko wtedy, gdy URL strony nie zawiera fragid / hashbang!

    Ponownie ładuje stronę bez ponownego sprawdzania lub ponownego sprawdzania każdy  świeży zasoby z pamięci podręcznej. Jeśli sam kod strony jest świeży, spowoduje to ponowne załadowanie strony bez wykonywania jakichkolwiek żądań HTTP.

    Jest to odpowiednik (z perspektywy buforowania) dla użytkownika otwierającego stronę w nowej karcie.

    Jeśli jednak adres URL strony zawiera hasz, nie spowoduje to żadnego efektu.

    Ponownie, zachowanie buforowania nie jest określone, o ile wiem; Ustaliłem to przez testowanie.

Podsumowując, chcesz użyć:

  • location = location dla maksymalnego wykorzystania pamięci podręcznej, tak długo jak strona nie ma hasha w adresie URL, w takim przypadku to nie zadziała
  • location.reload(true) aby pobrać nowe kopie wszystkich zasobów bez ponownej weryfikacji (chociaż nie jest powszechnie obsługiwany i nie będzie się zachowywał inaczej location.reload() w niektórych przeglądarkach, takich jak Chrome)
  • location.reload() wiernie odtworzyć efekt użytkownika klikając przycisk "odśwież".

28
2017-11-14 11:22



+1 dla lokalizacji = lokalizacja; niewielu ludzi sugeruje to, choć jest krótsza niż większość odpowiedzi, jedyną wadą jest to, że jest to czytelność, podczas gdy location.reload () jest nieco bardziej semantyczna - Brandito
@Brandito Co ważniejsze, location = location nie działa, jeśli w adresie URL znajduje się hash. Dla każdej witryny, która używa fragids - lub nawet dla każdej witryny, gdzie ktoś link do strony może dodać fragid do adresu URL - to czyni go zepsuty. - Mark Amery


window.location.reload() przeładuje się z serwera i ponownie załaduje wszystkie twoje dane, skrypty, obrazy itp.

Więc jeśli chcesz odświeżyć HTML, to window.location = document.URL zwróci znacznie szybciej i przy mniejszym natężeniu ruchu. Ale nie przeładuje strony, jeśli w adresie URL znajduje się hash (#).


20
2017-10-13 20:32



Takie zachowanie jest prawdziwe w Chrome przynajmniej: location.reload() wymusza rewalidację buforowanych zasobów, nawet bez argumentów, podczas gdy window.location = document.URL z przyjemnością udostępnia buforowane zasoby bez trafiania na serwer, o ile są świeże. - Mark Amery


JQuery Load funkcja może również wykonać odświeżenie strony:

$('body').load('views/file.html', function () {
    $(this).fadeIn(5000);
});

13
2018-06-24 20:08



Nie, to nie jest odświeżanie strony. - Mark Amery