Problem:
Bei der Entwicklung eines Projekts ist zuvor ein Problem aufgetreten. Nachdem die asynchrone Ajax-Anfrage erfolgreich war, muss ein neues Fenster geöffnet werden, um die URL zu öffnen , aber leider wird es vom Browser abgefangen. Okay, wie kann man dieses Problem lösen?
Analyse:
Der Grund, warum der Browser das neu geöffnete Fenster abfängt, liegt darin, dass der Vorgang nicht aktiv vom Benutzer ausgelöst wird, sodass er ihn für unsicher hält und abfängt (aber wenn es _self ist, dann). wird nicht Diese Einschränkung wird bestehen), selbst wenn das Benutzerverhalten wie Klicken oder Senden in der Ajax-Rückruffunktion (Trigger ('Klick')) simuliert wird, geht der Browser davon aus, dass es nicht aktiv vom Benutzer ausgelöst wird Es kann nicht sicher ausgeführt werden und wird daher abgefangen.
Lösung:
1. Ändern Sie asynchron zu synchron, das heißt: async:false
2. Richten Sie das neu geöffnete Fenster auf ein Objekt und ändern Sie dann die URL des Objekts. wie zum Beispiel:
$('.task').bind('click',function(){ var w = window.open(); $.ajax({ type: 'POST', url: '/surveyTask', dataType: 'json', error: function(){ w.close(); }, success: function(res){ w.location = res.url; } }); });
Das Letzte, was zu beachten ist: Die Online-Methode zum dynamischen Hinzufügen eines Formulars zum Öffnen eines neuen Fensters ist nicht für Ajax-Anfragen geeignet Zumindest nachdem der Blogger es getestet hat, funktioniert es immer noch, wenn es vom Browser blockiert wird.
Weitere verwandte Artikel zu Lösungen für das Abfangen von window.open() beim Öffnen eines neuen Fensters nach einer erfolgreichen Ajax-Anfrage finden Sie auf der chinesischen PHP-Website!