Bonjour,
J'ai les 2 actions suivantes :
(1) Ajax: Sélection (JS) qui ouvre vers un traitement (php)
(2) JS : Téléchargement si (readyState(action1) = 4) => window.open(url de mon download)
Dans (2) je boucle dans une fonction sur readyState(action1) et j'y reste tant que readyState < 3 (pour anticiper un peu).
Tout fonctionne bien sauf que :
Quand le client lance 2 requêtes AJAX consécutives, son navigateur interprète la boucle comme une erreur potentielle du JS et jette un beau "Un script sur cette page est peut-être occupé ou ne répond plus", du fait du while dans le 3eme code ci-dessous (en bold red).
=> La question est :
- Peut on éviter ce message en forçant l'exécution (comment..) ?
ou bien
- faut il mettre une condition de sortie bidon du while pour faire plaisir au navigateur ?
ou encore
- traiter le cas aussi par une requête Ajax (ce qui me pose problème car ma page de download ne s'ouvre évidemment pas dans ce cas)
ou enfin :
- En cas de 2 requêtes Ajax consécutives, annuler la première ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function Download() { PopUp('https://www/mondomain/pop_download.html', 'open', 'test', '200', '200', 'left', 'center', '6000', false); Sleep(1000); CheckSelectStatus(); if (globale_js4) var newWindow = window.open( globale_js4 ) ; else alert ('Téléchargement non réalisé'); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function Sleep(timeout_ms) { setTimeout("Sleep()", timeout_ms); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function CheckSelectStatus() { var timeout = ( select_request.readyState == 0) ? 2000 : ( select_request.readyState == 1) ? 1000 : 500 ; // Boucle d'attente de la réception server: while ( select_request.readyState < 3 ) { setTimeout("CheckSelectStatus()", timeout); } }
Partager