ajax 调用的生命周期是多长?

2023-12-31

假设我在 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的新变化吗?还是一收到第一个回复就关闭? 如果保持开放状态,会导致内存泄漏/浏览器速度变慢吗一段时间后积累了一些?我应该总是调用 resp.getWriter().close()在 servlet 代码的末尾?

最后,对于 jQuery 粉丝来说:

does $.ajax()表现得像XMLHttpRequest()在这方面?


xhr1还会等待readystate的新变化吗?还是一收到第一个回复就关闭?如果它保持打开状态,一段时间后是否会导致内存泄漏/浏览器速度变慢并累积其中一些?

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

我应该经常打电话吗resp.getWriter().close()在 servlet 代码的末尾?

不必要。 servlet 容器无论如何都会关闭它。自己关闭它只能防止响应链中进一步的某些(有缺陷的)代码写入响应主体的风险。有关更多详细信息,请参阅这个答案 https://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outputstream/1829823#1829823.

最后,对于 jQuery 粉丝来说:$.ajax()表现得像XMLHttpRequest()在这方面?

It uses XMLHttpRequest在幕后(仅当浏览器支持时;否则它是 MSIE ActiveX 对象)。它在每次调用时都会构造一个新的。打开未缩小的源代码 http://code.jquery.com/jquery-latest.js、Ctrl+FjQuery.ajaxTransport(功能。所有ajax处理代码几乎有200个loc,它涵盖了您能想到的所有可能的浏览器特定错误修复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ajax 调用的生命周期是多长? 的相关文章

随机推荐