假设我们通过 $.getScript
加载了一堆脚本:
$.getScript( 'js/script1.js' );
$.getScript( 'js/script2.js' );
$.getScript( 'js/script3.js' );
现在,我想在所有这些脚本加载完成后调用一个处理程序。我尝试为全局 ajaxStop
event 绑定(bind)一个处理程序.根据the docs , ajaxStop
全局事件被触发,如果没有更多的 Ajax 请求被处理。
$( document ).ajaxStop( handler );
但它不起作用(未调用处理程序)。
现场演示: http://jsfiddle.net/etGPc/2/
我怎样才能做到这一点?
最佳答案
我深入研究了这个问题,确实是跨域脚本请求需要注意。正如我在评论中发布的那样,该方案已经实现,因此它将 global
选项设置为 false
。这使得 jQuery 不会触发全局 ajax 事件。 (虽然不知道为什么已实现。)
这可以通过 this fiddle 确认(传递意味着 ajaxStop
被触发):
- 跨域,无脚本:通过
- 跨域,脚本:失败
- 无跨域,无脚本:通过
- 不跨域,脚本:通过
最直接的做法是简单地添加另一个预过滤器,强制 global
选项为真:
jQuery.ajaxPrefilter( "script", function() {
s.global = true;
});
这也使这个失败的场景成为过去。
关于javascript - 当所有脚本通过 $.getScript 完成加载时调用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8028724/