Maison > interface Web > js tutoriel > le corps du texte

Solution au problème selon lequel l'utilisation de window.open pour ouvrir une nouvelle fenêtre dans la réponse à la requête Ajax est interceptée

高洛峰
Libérer: 2017-01-09 14:15:17
original
1438 Les gens l'ont consulté

1. Description du problème

Une fois la requête asynchrone asynchrone réussie, une nouvelle fenêtre doit être ouverte pour ouvrir l'URL. La méthode window.open() est utilisée, mais elle le sera. intercepté par le navigateur et l'utilisateur doit cliquer sur Bas.

2. Analyse du problème

La raison pour laquelle le navigateur intercepte les fenêtres nouvellement ouvertes est que l'opération n'est pas activement déclenchée par l'utilisateur, il la considère donc comme dangereuse. , même si le comportement de l'utilisateur tel qu'un clic ou une soumission est simulé dans la fonction de rappel ajax (trigger('click')), le navigateur pensera qu'il n'est pas activement déclenché par l'utilisateur, il ne peut donc pas être exécuté en toute sécurité, donc il est intercepté.

Instructions :

1. Si c'est L'appel de window.open() dans la méthode fun spécifiée ici ne sera pas intercepté, car le navigateur pensera qu'il est actif. Mais l'ouverture de la fenêtre dans la réponse à la requête ajax sera interceptée.

2. Si vous n'ouvrez pas une nouvelle fenêtre, mais modifiez l'adresse Web d'origine, vous pouvez utiliser window.location = newurl pour y parvenir, afin qu'elle ne soit pas interceptée.

3. Solution

Avant la requête ajax, utilisez window.open pour ouvrir une fenêtre vide, puis définissez l'attribut d'emplacement de la fenêtre dans la fonction de réponse ajax. pour la nouvelle URL.

Exemple de code :

function fun(){
var tmpWin =window.open()
ajax(xxx, handle(){
//回调函数。这是伪代码,语法不准。
var newurl = xxxx
tmpWin.location = newurl;
})
}
Copier après la connexion

Il y a un problème avec la méthode ci-dessus, car une fenêtre vide est ouverte en premier. Si après l'échec de la requête ajax (problème de réseau ou de logique métier), aucun résultat normal ne sera affiché dans la nouvelle fenêtre, ce qui peut prêter à confusion pour l'utilisateur.
Une solution est qu'en cas de problème avec ajax, vous pouvez envisager de donner une invite, telle que tmpWin.document.write("Serverprocessing exception");

Même pour empêcher ajax temps de réponse Trop long. Lorsque la fenêtre est créée, l'invite tmpWin.document.write("Le serveur est en cours de traitement, veuillez patienter") est immédiatement donnée

Si ajax revient normalement plus tard, c'est le cas ; étant donné que l'emplacement est une valeur définie, les informations imprimées d'origine seront écrasées par les informations de la nouvelle page.

Voici une autre méthode, mais elle présente également des défauts :

Comme ajax peut être défini comme une requête synchrone, vous pouvez utiliser window.open pour ouvrir une nouvelle fenêtre après la requête ajax. Par exemple :

function fun(){
var result;
ajax({ //需要设置同步请求
.....
result = xxx
.......
})
if(result){
window.open(xxxx)
}
}
Copier après la connexion

L'approche ci-dessus évite les problèmes mentionnés ci-dessus car elle ouvre une nouvelle fenêtre après avoir jugé le résultat de la requête ajax.
Cependant, comme il s'agit d'une requête synchrone, nous avons trouvé un problème lors de notre test. Si le temps de réponse du serveur est trop long, d'une part, l'interface se mettra en pause (l'expérience utilisateur n'est pas bonne), et d'autre part, la nouvelle fenêtre s'ouvrira. sera bloqué.

Pas de problème uniquement si le serveur revient rapidement. Lors de notre test, nous avons dormi 1 seconde pendant le traitement du code serveur et avons constaté que la nouvelle fenêtre était bloquée.

4. Résumé

En résumé, on peut voir qu'il n'y a pas de moyen particulièrement parfait d'ouvrir une nouvelle fenêtre après le retour d'ajax. Plus précisément, vous devez prendre les mesures appropriées en fonction des caractéristiques commerciales de votre propre système.

Ce qui précède est la solution que l'éditeur vous présente lorsque vous utilisez window.open pour ouvrir une nouvelle fenêtre dans la réponse à la requête Ajax et être intercepté. J'espère que cela vous sera utile si vous. Si vous avez des questions, veuillez nous contacter. Je laisserai un message et l'éditeur vous répondra à temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !

Pour plus d'articles connexes sur la façon de résoudre le problème de l'utilisation de window.open pour ouvrir une nouvelle fenêtre dans la réponse à la demande Ajax, veuillez faire attention au site Web PHP chinois !


source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!