Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ajax调用的生命周期是多少?_Java_Javascript_Jquery_Ajax_Servlets - Fatal编程技术网

Java ajax调用的生命周期是多少?

Java ajax调用的生命周期是多少?,java,javascript,jquery,ajax,servlets,Java,Javascript,Jquery,Ajax,Servlets,假设我有javascript代码: function doAnAjaxCall () { var xhr1 = new XMLHttpRequest(); xhr1.open('GET', '/mylink', true); xhr1.onreadystatechange = function() { if (this.readyState == 4 && this.status==200) { alert("Hey

假设我有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()

xhr1是否仍将等待readystate中的新更改?还是在收到第一个响应后立即关闭?如果它保持打开状态,是否会导致内存泄漏/过一段时间后浏览器速度变慢并积累一些内存泄漏/浏览器速度变慢

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

我是否应该始终在servlet代码末尾调用
resp.getWriter().close()

没有必要。servletcontainer仍将关闭它。自己关闭它只会防止响应链中的某些(错误)代码写入响应体的风险。有关详细信息,请参见

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


它在封面下使用
XMLHttpRequest
(仅当浏览器支持时;否则它是MSIE ActiveX对象)。它在每次调用时构造一个新的。打开,Ctrl+F
jQuery.ajaxTransport(
函数)。所有ajax处理代码几乎都是200 loc,它涵盖了您可以想到的所有可能的浏览器特定错误修复。

这并不能直接回答您的问题,但在您的示例中,您在调用send(null)后错误地设置了onreadystatechange,这是一个bug。从来没有想过,但是在发送之前设置事件处理程序是完全有意义的。我会在我的真实代码中更改它。不过,我从来没有遇到过这个问题。谢谢你的透彻解释。如果你不介意再看一看的话,我会用一些新的简短问题更新这篇文章。不客气。好吗这不是更适合另一个问题吗?