Quelle est la durée de vie d'un appel ajax?

Disons que j'ai ce code en javascript:

function doAnAjaxCall () { var xhr1 = new XMLHttpRequest(); xhr1.open('GET', '/mylink', true); xhr1.onreadystatechange = function() { if (this.readyState == 4 && this.status==200) { alert("Hey! I got a response!"); } }; xhr1.send(null); } 

Et laissez le code dans la servlet être:

 public class RootServlet extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.getWriter().write("What's up doc?"); resp.setStatus(200); } } 

Will xhr1 attend-il toujours de nouveaux changements dans readishtate? Ou est-il fermé dès qu'il obtient la première réponse? Si elle reste ouverte, cela entraînera-t-il des fuites de mémoire / un navigateur plus lent après un certain temps et en accumulant quelques-uns? Devrais-je toujours appeler resp.getWriter (). Close () à la fin du code servlet?

Et enfin, pour les fans de jQuery là-bas:

$.ajax() se comporte comme XMLHttpRequest() à cet égard?

Will xhr1 attend-il toujours de nouveaux changements dans readishtate? Ou est-il fermé dès qu'il obtient la première réponse? Si elle reste ouverte, cela entraînera-t-il des fuites de mémoire / un navigateur plus lent après un certain temps et en accumulant quelques-uns?

Dans les coulisses, il reste ouvert. Il (et l'occupation de la mémoire) est néanmoins la responsabilité du moteur du navigateur web. Il maintient une certaine quantité de connexions dans un pool qui a une limite maximale par domaine de toute façon. MSIE, par exemple, a un bogue qui provoque une fuite lorsqu'ils sont en cours d'exécution alors que l'utilisateur décharge (ferme) la fenêtre.

Devrais-je toujours appeler resp.getWriter().close() à la fin du code servlet?

Pas nécessaire. Le conteneur de servlet va le fermer de toute façon. Le fermer vous-même empêche seulement le risque de l'ajout d'un code (buggy) dans la chaîne de réponse de l'écriture au corps de réponse. Pour plus de détails, voir cette réponse .

Et, enfin, pour les fans de jQuery là-bas: le $.ajax() se comporte-t-il comme XMLHttpRequest() à cet égard?

Il utilise XMLHttpRequest sous les couvertures (uniquement lorsqu'elle est prise en charge par le navigateur, sinon c'est l'objet MSIE ActiveX). Il construit un nouveau sur chaque appel. Ouvrez le code source non modifié , Ctrl + F le jQuery.ajaxTransport( fonction. Tout le code de gestion ajax est à peu près de 200 loc et couvre toutes les corrections de bugs spécifiques au navigateur possibles que vous pouvez réfléchir.