繁体   English   中英

ajax通话的寿命是多少?

[英]What is the life span of an ajax call?

假设我在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);
}

并让servlet中的代码为:

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

xhr1还会等待readystate的新变化吗? 或者它在第一次回复后立即关闭? 如果它仍然打开, 它会在一段时间后导致内存泄漏/浏览器速度变慢并累积其中一些? 我应该总是在servlet代码的末尾调用resp.getWriter()。close()吗?

最后,对于那里的jQuery粉丝:

$.ajax() XMLHttpRequest()在这方面表现为XMLHttpRequest()吗?

xhr1还会等待readystate的新变化吗? 或者它在第一次回复后立即关闭? 如果它仍然打开,它会在一段时间后导致内存泄漏/浏览器速度变慢并累积其中一些?

在幕后,它仍然是开放的。 然而,它(以及内存占用)是webbrowser引擎的责任。 它在池中维护一定数量的连接,无论如何每个域都有一个最大限制。 例如,MSIE有一个错误,当用户卸载(关闭)窗口时,它们会在它们仍在运行时泄漏。

我应该总是在servlet代码的末尾调用resp.getWriter().close()吗?

不必要。 无论如何,servletcontainer都将关闭它。 自己关闭它只能防止响应链中某些(错误的)代码进一步写入响应主体的风险。 有关更多详细信息,请参阅此答案

最后,对于那里的jQuery粉丝: $.ajax() XMLHttpRequest()在这方面是否表现为XMLHttpRequest()

它使用XMLHttpRequest (仅当浏览器支持时;否则它是MSIE ActiveX对象)。 它在每次通话时构建一个新的。 打开未经授权的源代码 ,按Ctrl + F jQuery.ajaxTransport(函数。所有ajax处理代码几乎是200 loc,它涵盖了您可以考虑的所有可能的浏览器特定错误修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM