2016-03-28 16 views
0

Da das synchrone XMLHttpRequest veraltet ist, frage ich mich, ob es eine Art Alternative gibt, um ein ähnliches Verhalten zu simulieren, da nicht blockierende asynchrone XMLHttpRequests in einigen Fällen nicht geeignet sind.Synchrone XMLHttpRequest im Hauptthread ist veraltet. Gibt es eine Alternative zum Senden einer Anfrage vor dem Öffnen einer neuen Seite?

Ich spreche insbesondere über einen Fall, wo ich eine Post-Anfrage an den Server senden muss, wenn ein Benutzer auf einen Hyperlink klickt. Die Verwendung von PreventDefault ist hier keine Option. Mit Synchrone XMLHttpRequest kann ich ein OnClick-Ereignis verwenden, die Anfrage senden, und sobald es fertig ist, setzt der Browser sein Standardverhalten fort. Wenn die Anfrage asynchron ist, würde dies zu zufälligen Ergebnissen führen, da alles davon abhängt, wie schnell die neue Seite geladen wird, damit die Anfrage enden kann oder nicht.

Gibt es einen "modernen" Weg, wie man das Standardverhalten des Browsers einfriert, bis die Post-Anfrage beendet ist?

Grüße und danke.

+0

Verwenden Sie Frameworks? Die meisten machen es einfach, ein Element und seine Kinder nicht zu laden/anzuzeigen. in Angular würden Sie ng-show oder ng-if = "myCondition" ausführen. Sobald sich diese Bedingung ändert, wird das Element angezeigt. Dasselbe können Sie in Vanille JS tun, obwohl es nicht so einfach ist. –

+0

Ich denke, dass Sie sich vielleicht ein bisschen zu viel Sorgen machen. In den https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests heißt es: 'Hinweis: Ab Gecko 30.0 (Firefox 30.0/Thunderbird 30.0/SeaMonkey 2.27), synchrone Anfragen auf dem Der Hauptthread wurde aufgrund der negativen Auswirkungen auf die Benutzererfahrung als veraltet eingestuft. ' Ich nehme das zu bedeuten, wenn die XHR-Anfrage innerhalb des Onload-Ereignisses ist - aber ich könnte falsch liegen :-( – jeff

+0

Oder Sie können einfach eine normale für Post und haben den Server auf die neue Seite umleiten, wie wir es in den alten Tagen getan haben. – epascarello

Antwort

3

Im Rückruf:

window.location.href = "new url" 
+0

Dies sollte den Trick tun.Haben Sie nicht darüber nachgedacht Manchmal ist der einfachste Weg der beste.Thanks –

+0

@RobertKoszewski können Sie meine Antwort akzeptieren? –