Jquery 如何确保没有等待加载的AJAX调用?
我正在写一个自动化测试程序,应该测试任何网站 我想单击文档的某些元素,但在此之前,我想验证是否没有任何AJAX调用正在运行 我只有文档,没有任何AJAX调用URL或类似的东西 有什么方法可以让我在文档中验证并没有执行AJAX请求Jquery 如何确保没有等待加载的AJAX调用?,jquery,ajax,google-chrome,Jquery,Ajax,Google Chrome,我正在写一个自动化测试程序,应该测试任何网站 我想单击文档的某些元素,但在此之前,我想验证是否没有任何AJAX调用正在运行 我只有文档,没有任何AJAX调用URL或类似的东西 有什么方法可以让我在文档中验证并没有执行AJAX请求 我该怎么做呢?简单的回答:你不能。HTTP是无状态的,浏览器无法知道请求是否已发送,以及我们是否仍在等待答复 唯一能够知道的是应用程序本身,使用应用程序逻辑。在等待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方法。轰,完成;)