我有一个页面,我可以插入一些javascript / jquery来操作输出。我对页面标记等没有任何其他控制权。
我需要在页面上的每个元素之后通过jquery添加一个额外的元素。问题是元素是通过现有页面上的异步调用生成的,该调用发生在$(document).ready完成之后。
基本上,我需要一种在页面加载完成后调用我的jquery以及随后的ajax调用完成的方法。有没有办法检测页面上任何ajax调用的完成情况,然后调用我自己的自定义函数在新创建的s之后插入其他元素?
答案 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()。