Java ajax调用的生命周期是多少?
假设我有javascript代码: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
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+FjQuery.ajaxTransport(
函数)。所有ajax处理代码几乎都是200 loc,它涵盖了您可以想到的所有可能的浏览器特定错误修复。这并不能直接回答您的问题,但在您的示例中,您在调用send(null)后错误地设置了onreadystatechange,这是一个bug。从来没有想过,但是在发送之前设置事件处理程序是完全有意义的。我会在我的真实代码中更改它。不过,我从来没有遇到过这个问题。谢谢你的透彻解释。如果你不介意再看一看的话,我会用一些新的简短问题更新这篇文章。不客气。好吗这不是更适合另一个问题吗?