it-swarm.com.de

window.location.reload funktioniert nicht für Firefox und Chrome

Ich möchte den Benutzerstatus beim Klicken auf eine Schaltfläche ändern, also alles, was ich tue, ist, den aktuellen Status zu erkennen und gegebenenfalls zu ändern.

In diesem Fall ändert sich jedoch der Status im Backend. Um den Status anzuzeigen, muss die Seite jedoch aktualisiert werden, da beim Aktualisieren der aktuelle Status überprüft und angezeigt wird. Daher verwende ich die Eigenschaft "window.location.reload", um den neuesten Status auf der Seite anzuzeigen

Alle Dinge funktionieren gut im IE. Bei Firefox und Chrome ändert sich der Status jedoch nicht. Ich denke, "window.location.reload" funktioniert nicht, denn wenn ich nur diese Zeile kommentiere und versuche, auf die Schaltfläche zu klicken und die Seite manuell zu aktualisieren, werden die Statusänderungen angezeigt.

Können Sie mir bitte vorschlagen, was ich verwenden soll, damit dies in Firefox und Chrome funktioniert?

Wenn ich gegoogelt habe, habe ich irgendwo gefunden, dass es in Firefox und Chrome funktioniert, wenn Sie es in "setTimeout ()" angeben. Ich habe es versucht, aber selbst dann funktioniert es nicht für mich.

<script>

    $(document.body).on('click', '#activate', function () {
        var pkgVersion = $(this).attr('data-version');
        alert("@Url.Action("SetActivePackage", "Deployment")", { version: pkgVersion });
        $.get("@Url.Action("SetActivePackage", "Deployment")", { version: pkgVersion }).done(function () {

        });
         setTimeout(function () { window.location.reload(data); }, 0);
    });
</script>

Bitte vorschlagen!

16
UID

Ich habe zwei andere Möglichkeiten für Sie:

history.go(0);

Und:

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

Ich habe es noch nicht auf Firefox und Chrome getestet, aber es kann Ihnen helfen, schneller zu sein. Morgen mache ich die Tests und aktualisiere die Antwort, falls dies nicht funktioniert.

27

Ich hatte dieses Problem in AngularJS und in Firefox. (Das Wiederladen war in Chrome in Ordnung) .__ Durch Verwendung des Problems setTimeout behoben.

setTimeout(function(){
  window.location.reload();
});
26

Hast du das probiert ?:

window.location = window.location;

Anscheinend kann man das "Fenster" fallen lassen, habe es aber selbst nicht ausprobiert.

10
Shylo Hana

Ich hatte das gleiche Problem in Chrome und Firefox. Ich konnte das Problem beheben, indem der Server mit der URL der Seite antwortete. In Ihrem Fall können Sie die Antwort als neuen Wert für den Benutzerstatus festlegen. Hier sind zwei Beispiele: 

$.post('?action=' + myAction, function (data) {
        window.location.href = data;
    });

..und die Serverantwort

Response.Write("/yourUrl);
Response.End();

Dies beseitigte die Inkonsistenz in Chrome und die Seite wird ohne Fehler neu geladen. 

2
Michael

Hier arbeitet das für mich mit Fire Fox sowie Chrome und es funktioniert gut mit IE.

object.reload(forcedReload);
1
Dhruv Gurjar

Schau mal Du kannst den Reload zwingen, die Seite vom Server zu bekommen, indem du den forceGet -Parameter auf true setzt: 

location.reload(true);
1

Mega Lösung habe ich gerade gefunden.

Sie müssen simulieren, um ein leeres Formular zu posten.

HTML

<form id="myForm" action='@Url.Action("Details","Main", new { id = @Model.ID } )'></form>

JS

document.getElementById("myForm").submit();
0
Developer

Aus meiner Sicht ist der Schlüsselpunkt, dass der Ort der Funktion für mich über dem Ort liegen musste, an dem der Anruf entstand. Wenn ich davon ausgehe, dass der Browser das Javascript von oben nach unten interpretiert, schlägt mein Code zum Neuladen unter dem Objekt, das ihn aufruft, fehl. Wenn ich den Code darüber setze, window.location.href = window.location.href; hat funktioniert. 

0
Matt Meents