假设我在 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(使用前将#替换为@)