【问题标题】:How to get that there is no AJAX call is pending to load?如何获得没有等待加载的 AJAX 调用?
【发布时间】:2013-11-29 07:09:50
【问题描述】:

我正在编写一个可以测试任何网站的自动化测试程序。

我想点击文档的某个元素,但在此之前我想确认没有任何 AJAX 调用正在运行。

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

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

我该怎么做?

【问题讨论】:

  • 修改原生 XMLHttpRequest 方法。繁荣,完成;)

标签: jquery ajax google-chrome


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      也许您也不需要 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();}
      

      【讨论】:

        【解决方案4】:

        您可以使用以下技术:

        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 是否具有真实值。如果有;一些使用 id 运行的 ajax 调用。如果还没有,您就知道没有任何 ajax 进程正在运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-15
          • 1970-01-01
          • 2023-04-03
          相关资源
          最近更新 更多