如何使用jQuery检测“任何”ajax请求?

时间:2010-05-26 10:27:02

标签: jquery ajax load detect

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

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

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

5 个答案:

答案 0 :(得分:45)

不幸的是,这不适用,因为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();
});

答案 1 :(得分:2)

此示例仅使用jQuery显示和隐藏ajax调用开始和结束时的元素:

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

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

#contentLoading是一个gif图片进度指示器。

答案 2 :(得分:1)

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

$(document).ready(function(){
    $("#some_div").load('/some_url/', function(){
        /* Your code goes here */
    });
});

答案 3 :(得分:1)

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

使用纯Javascript here查看解决方案。

答案 4 :(得分:0)

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