Jquery 如何确保没有等待加载的AJAX调用?

Jquery 如何确保没有等待加载的AJAX调用?,jquery,ajax,google-chrome,Jquery,Ajax,Google Chrome,我正在写一个自动化测试程序,应该测试任何网站 我想单击文档的某些元素,但在此之前,我想验证是否没有任何AJAX调用正在运行 我只有文档,没有任何AJAX调用URL或类似的东西 有什么方法可以让我在文档中验证并没有执行AJAX请求 我该怎么做呢?简单的回答:你不能。HTTP是无状态的,浏览器无法知道请求是否已发送,以及我们是否仍在等待答复 唯一能够知道的是应用程序本身,使用应用程序逻辑。在等待AJAX回复时设置变量,添加到列表,增加计数器。。。然后可以“监视”变量 恐怕我不知道有什么优雅的方法可以

我正在写一个自动化测试程序,应该测试任何网站

我想单击文档的某些元素,但在此之前,我想验证是否没有任何AJAX调用正在运行

我只有文档,没有任何AJAX调用URL或类似的东西

有什么方法可以让我在文档中验证并没有执行AJAX请求


我该怎么做呢?

简单的回答:你不能。HTTP是无状态的,浏览器无法知道请求是否已发送,以及我们是否仍在等待答复

唯一能够知道的是应用程序本身,使用应用程序逻辑。在等待AJAX回复时设置变量,添加到列表,增加计数器。。。然后可以“监视”变量


恐怕我不知道有什么优雅的方法可以做到这一点。将所有AJAX调用封装在一个方法中并改用该方法可能会起作用-您可以在上线时禁用测试代码。

也许您也不需要javascript?所以你可以使用这种代码

 javascript:void(d=document);if(frames.length){alert('Script doesnt work in frame');}else
    {while((el=d.getElementsByTagName('script')).length
        {el[0].parentNode.removeChild(el[0]);};onerror=function(){};d.close();}

jQuery有几个方面。如果您在
ajaxStart
上将
ajaxsecuting
设置为true,并在
ajaxStop
上将其设置为false,您应该知道AJAX是否正在执行。

您可以使用以下技术:

var loadingarray=[];

function GetCommand(id, sid) {
    if (loadingarray[id]) {return false;}
    loadingarray[id] =  true;
        getCommandResponse = $.ajax({
//send id to server
         ....
         ....
        });

}

function AjaxFinishedGet(xml, status) {
//retrieve id from server in xml
    loadingarray[id] = false;
    ...
    ...
}

然后您可以简单地检查loadingarray是否有真值。若有,;一些ajax调用使用id运行。如果没有,您知道没有任何ajax进程正在运行。

修改本机XMLHttpRequest方法。轰,完成;)