Combien de temps le navigateur attendre après une requête ajax?

combien de temps le navigateur peut-il attendre avant qu'une erreur s'affiche avant que le serveur réponde à la demande? Peut-être est-elle illimitée?

58
demandé sur Magnus Johansson 2011-09-04 11:02:16

4 réponses

si vous utilisez un jQuery $.ajax call vous pouvez définir la propriété timeout pour contrôler la quantité de temps avant qu'une requête retourne avec un statut timeout. Le délai est fixé en millisecondes, il suffit de le régler à une valeur très élevée. Vous pouvez aussi le mettre à 0 pour "illimité", mais à mon avis vous devriez juste une grande importance à la place.

Note: unlimited est en fait la valeur par défaut mais la plupart des navigateurs ont des timeouts par défaut qui seront touchés.

Lorsqu'un appel ajax est retourné en raison d'un délai d'attente, il reviendra avec un statut d'erreur de" délai d'attente " que vous pouvez gérer avec un cas séparé si nécessaire.

donc si vous voulez définir un délai de 3 secondes, et gérer le délai voici un exemple:

$.ajax({
    url: "/your_ajax_method/",
    type: "GET",
    dataType: "json",
    timeout: 3000, //Set your timeout value in milliseconds or 0 for unlimited
    success: function(response) { alert(response); },
    error: function(jqXHR, textStatus, errorThrown) {
        if(textStatus==="timeout") {  
            alert("Call has timed out"); //Handle the timeout
        } else {
            alert("Another error was returned"); //Handle other error type
        }
    }
});​
67
répondu Tj Kellie 2017-05-23 12:18:17

Oui et non. Oui le serveur peut le faire OU être configuré pour le faire, non les navigateurs (Je ne connais pas les spécificités de la version/du distributeur) peuvent avoir des timeouts activés.

il y a cependant 2 solutions pour réaliser / émuler ceci sur HTTP:

  • pour les résultats, ce serait beaucoup plus sûr de la solution. Par exemple: un script miniature du côté d'un serveur de traitement d'image: l'utilisateur télécharge une image le serveur imidiatly renvoie un 200 et un "Job ID". Le client (javascript^^) peut alors utiliser le JobID pour demander l'état/le résultat de la tâche.
  • si votre but est d'avoir quelque chose comme une connexion en temps réel entre le navigateur et le serveur (connexion à Sens Unique, Une fois la demande faite par le navigateur aucune information supplémentaire ne peut être envoyée sans utiliser de nouvelles requêtes (ajax^^), cela s'appelle long polling / reverse ajax et peut être utilisé pour la communication en temps réel via http. Il y a plusieurs techniques utilisant 2 longues requêtes en parallèle, de sorte qu'une fois que l'une d'elles s'arrête, la seconde devient active et la première tente de se reconnecter.
14
répondu smassey 2011-10-03 15:44:07

Pouvez-vous expliquer un peu plus sur ce que vous essayez d'atteindre - avez-vous un long processus en cours d'exécution sur un serveur, voulez-vous de modifier les paramètres sur un ordinateur local ou êtes-vous après une gérer pour un grand nombre d'utilisateurs?

combien de temps le navigateur va - t-il attendre dépend d'un certain nombre de facteurs, par exemple où le temps d'attente se produit-est-ce au niveau du TCP, du serveur ou du navigateur local?

si vous avez un long processus en cours sur un le serveur et vous voulez mettre à jour une page Web par la suite la façon habituelle de le gérer est d'exécuter le long processus de manière asynchrone et d'aviser le client quand il est terminé, par exemple avoir un appel ajax qui interroge le serveur, ou utiliser HTTP 1.1 et servir un flux de notification au client.

dans les deux cas, il est toujours possible que la connexion soit fermée, de sorte que le client aura toujours besoin de la possibilité de la rouvrir.

3
répondu Andy Davies 2011-09-28 13:46:42

j'ai trouvé, que dans le cas d'une demande normale (page HTML), les navigateurs s'exécutent jusqu'à l'arrêt après ACC. 30 secondes de. C'est important, parce que d'autres participants le suivent probablement: proxies, routeurs (est-ce que les routeurs jouent dans ce jeu? Je ne suis pas sûr). J'utilise 4 sec long retard côté serveur (s'il n'y a rien à envoyer au client), et mon client AJAX exécute une autre requête HTTP immédiatement (je suis sur le réseau local, il n'y a pas de décalage internet). 4 sec est assez long pour ne pas surcharger le serveur et le réseau avec des sondages fréquentés, et est assez court pour le cas, quand d'une façon ou d'une autre un sondage tombe hors de la rangée que le client ne peut pas détecter et gérer.

il y a aussi d'autres problèmes avec comet (longue requête HTTP): limite du navigateur sur le nombre de requêtes HTTP simultanées, traitement des événements côté client (doit être envoyé immédiatement au serveur), détection et récupération des pannes du serveur/réseau, traitement des utilisateurs multiples, etc.

2
répondu ern0 2011-10-04 08:16:01