Mon Javascript doit envoyer des données à un serveur lorsque la page se ferme, ce que je fais actuellement avec une requête AJAX synchrone (SJAX?) En window.onbeforeunload
. Le problème avec ceci, bien sûr, est que si mon serveur prend trop de temps ou que la connexion réseau meurt, le navigateur se fige. D'après ce que j'ai lu, il n'est pas possible de spécifier un délai d'expiration pour les requêtes AJAX synchrones, et les requêtes AJAX asynchrones ne fonctionnent pas sur window.onbeforeunload
. Ma meilleure estimation à la façon de résoudre ce serait d'utiliser une requête asynchrone, puis verrouiller le navigateur pendant un certain temps pour laisser la finition de la demande:Javascript timeout AJAX synchrone
window.onbeforeunload = function() {
doSomeAjax(); // asynchronous request
var now = new Date();
var time_limit = now.getTime()+2000; // 2,000 ms
while(now.getTime() < time_limit) {
now = new Date();
}
}
Est-ce que ce travail? Y a-t-il des problèmes potentiels avec cette méthode?
Personnellement, je pense que toute cette approche pourrait devoir changer. Les événements de fermeture de fenêtres sont difficiles et ce qui fonctionne sur un navigateur est sûr d'en interrompre un autre. Pourriez-vous nous en dire un peu plus sur votre objectif? Alors quelqu'un pourrait être en mesure de proposer une approche différente. – e4c5