我有一个页面,我可以在其中插入一些 javascript / jquery 来操作输出。我对页面标记等没有任何其他控制权。
我需要在页面上的每个出现之后通过 jquery 添加一个额外的元素。问题是元素是通过在 $(document).ready 完成后发生的现有页面上的异步调用生成的。
本质上,我需要一种在页面加载后调用我的 jquery 并且随后的 ajax 调用完成的方法。有没有办法检测页面上任何 ajax 调用的完成,然后调用我自己的自定义函数在新创建的 s 之后插入附加元素?
不幸的是,这并不适用,因为 OP 似乎没有使用 或任何 jQuery ajax 方法来实际加载内容,但将其留在这里以防未来的 googler 这样做。$.ajax()
您可以在这里使用任何满足您需求的全局 ajax 事件,您可能在 $.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();
});
此示例仅使用 jQuery 在 ajax 调用的开始和结束处显示和隐藏元素:
$("#contentLoading").ajaxSend(function(r, s) {
$(this).show();
$("#ready").hide();
});
$("#contentLoading").ajaxStop(function(r, s) {
$(this).hide();
$("#ready").show();
});
#contentLoading
是一个 gif 图像进度指示器。
据我所知,您在准备好的处理程序中使用了一些 jQuery 的 Ajax 函数。因此,您可以将另一个函数传递给它,该函数将在您的 Ajax 函数获得响应后调用。例如
$(document).ready(function(){
$("#some_div").load('/some_url/', function(){
/* Your code goes here */
});
});
您可以重写 XMLHttpRequest 对象的 send() 函数。
在此处查看使用纯 Javascript 的解决方案。
您可以使用.live() / .delegate()。