[英]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.