代码之家  ›  专栏  ›  技术社区  ›  Brian Scott

如何检测使用jquery完成的“any”Ajax请求?

  •  13
  • Brian Scott  · 技术社区  · 14 年前

    我有一个页面,可以在其中插入一些javascript/jquery来操作输出。我对页面标记等没有任何其他控制权。

    我需要通过jquery在页面上显示的每个元素之后添加一个额外的元素。问题是,这些元素是通过在$(document).ready之后的现有页上的异步调用生成的。

    本质上,我需要一种在页面加载和随后的Ajax调用完成后调用jQuery的方法。有没有一种方法可以检测到页面上任何Ajax调用的完成情况,然后调用我自己的自定义函数在新创建的s之后插入其他元素?

    5 回复  |  直到 10 年前
        1
  •  45
  •   Nick Craver    14 年前

    不幸的是,这不适用,因为似乎OP没有使用 $.ajax() 或者任何jquery ajax方法,用于实际加载内容,但将其留在这里,以防将来Googler这样做。


    你可以使用 any of the global ajax events that meet your needs here ,你可能在 $.ajaxComplete() $.ajaxSuccess() .

    例如:

    $(document).ajaxSuccess(function() {
      alert("An individual AJAX call has completed successfully");
    });
    //or...
    $(document).ajaxComplete(function() {
      alert("ALL current AJAX calls have completed");
    });
    

    如果您只想运行一些通用函数,那么将它们附加到文档中(它们只是下面的事件)。如果您想显示一些特别的东西,例如模式或消息,您可以使用它们稍微整洁一点(尽管这似乎不是您想要的),如下所示:

    $("#myModal").ajaxComplete(function() {
      $(this).fadeIn().delay(1000).fadeOut();
    });
    
        2
  •  2
  •   Gutzofter    14 年前

    此示例仅显示并隐藏使用jquery在Ajax调用开始和结束时的元素:

        $("#contentLoading").ajaxSend(function(r, s) {
            $(this).show();
            $("#ready").hide();
        });
    
        $("#contentLoading").ajaxStop(function(r, s) {
            $(this).hide();
            $("#ready").show();
        });
    

    #contentLoading 是一个GIF图像进度指示器。

        3
  •  1
  •   sanya    14 年前

    我可以理解,您在准备好的处理程序中使用了一些jquery的ajax函数。所以您可以将另一个函数传递给它,它将在Ajax函数得到响应后调用。例如

    $(document).ready(function(){
        $("#some_div").load('/some_url/', function(){
            /* Your code goes here */
        });
    });
    
        4
  •  1
  •   Community dbr    7 年前

    您可以重写xmlhttpRequest对象的send()函数。

    使用纯javascript查看解决方案 here .

        5
  •  0
  •   Tgr    14 年前

    你可以使用 .live() / .delegate() .