我知道關於jQuery's ajaxStop的方法。檢查所有Ajax請求何時完成 - 純JavaScript
$(document).ajaxStop(function() { //Do something });
如果jQuery不可用,有沒有辦法用純JavaScript來做到這一點?
你能舉個例子嗎?
乾杯
我知道關於jQuery's ajaxStop的方法。檢查所有Ajax請求何時完成 - 純JavaScript
$(document).ajaxStop(function() { //Do something });
如果jQuery不可用,有沒有辦法用純JavaScript來做到這一點?
你能舉個例子嗎?
乾杯
很好,我會咬(但即使沒有試圖在你的部分很懶惰):
每當Ajax請求完成時,jQuery將檢查是否存在其他未完成的Ajax請求。如果不存在,jQuery將觸發ajaxStop事件。任何和所有已經使用.ajaxStop()方法註冊的處理程序都會在此時執行。
那麼你需要什麼?那麼:您將用來執行AJAX請求的中央API(各種模塊)。在這個模塊中,你必須跟蹤待處理的請求,並在請求終止後刪除它們。
如果隊列(可以這麼說)是空的,那麼你可以檢查ajaxStop
隊列中的任何已註冊的回調,並調用它們。
基本設置(僞代碼)是這樣的:
var myAjax = (function()
{//create closure scope to track ajax requests
var activeRequests = [],
stopQueue = [],
ajaxModule = {},//the module itself
createXhr = function(){};//function to create XHR requests
ajaxModule.ajax = function(params, callback)
{
var xhr = createXhr(params),
key = activeRequests.length;
activeRequests.push(xhr);//add to active array
xhr.onreadystatechange = function()
{//assign internal handler
if (this.readyState === 4 && this.status === 200)
{
//invoke passed callback only if request is done
callback.call(this, []);//pass params as you please
activeRequests.filter(function(e)
{
return e !== this;
}, this);//define this callback in closure, of course
if (activeRequests.length === 0)
{//no more active requests
stopQueue.map(function(callback)
{
callback();//invoke callbacks
});
}
}
};
};
return ajaxModule;//expose module
}());
當然,你仍然必須執行該管理stopQueue回調的功能,你就必須實現可靠的AJAX模塊,但這是您可以使用的簡單設置。
乾杯。我找不到一個很好的例子來學習。 – Paddy 2014-09-22 10:25:38
的JavaScript abort();
方法 參考 http://help.dottoro.com/ljomfaxv.php
var httpRequest = null;
function sentReq() {
if (!httpRequest) {
httpRequest = CreateHTTPRequestObject();
}
if (httpRequest) {
var url = "file.php";
httpRequest.open ("GET", url, true);
httpRequest.onreadystatechange = OnStateChange;
httpRequest.send (null);
}
function abort(){
if(httpRequest)
httpRequest.abort();
}
它會幫助你包括一個簡短的例子。 – Xan 2014-09-22 10:28:24
你可以看看jQuery的源代碼,它是如何在那裏處理的...... – Sirko 2014-09-22 09:55:59
是的,你可以在沒有jQuery的情況下做到這一點...甚至沒有那麼難。這是個問題嗎?或者你指望我們告訴你如何? – 2014-09-22 09:59:08
你能讓我知道嗎?這確實是一個問題。 – Paddy 2014-09-22 10:01:02