簡體   English   中英

ajax通話的壽命是多少?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM