我了解jQuery's ajaxStop方法。
$(document).ajaxStop(function() { //Do something });
如果jQuery不可用,有没有办法用纯JavaScript做到这一点?
你能提供一个例子吗?
干杯
答案 0 :(得分:1)
很好,我会咬人(虽然你的尝试甚至都不是很懒):
来自jQuery docs:
每当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模块,但这是你可以使用的简单设置。
答案 1 :(得分:0)
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();
}