我遇到了一个需要AJAX加载某些脚本的问题,只有在脚本加载和解析/执行后才应该触发回调函数。
似乎ajax请求会在脚本下载后立即触发回调,但不一定会在执行完脚本时触发。有没有办法做到这一点,而不是使用Timeouts等等?
$.ajax({
dataType: 'script',
cache: false,
async: false,
url: 'http://example.com/script1.js'
}).success(function () {
// I need this callback to fire only once the script has been executed
});
答案 0 :(得分:1)
你应该在
时查看jquerys允许您在执行多个异步(ajax)方法后执行代码。
来自jquery文档:
描述:提供一种基于one执行回调函数的方法 或更多对象,通常是表示异步的延迟对象 事件
https://api.jquery.com/jquery.when/
对于在运行代码之前要执行的脚本,jquery有一个解决方案; getScripts
$.getScript("jquery.cookie.js")
.done(function() {
jQuery.cookie("cookie_name", "value", { expires: 7 });
});
在运行代码之前加载多个脚本并执行它们,方法是 getScript 和
$.when(
$.getScript( "/script1.js" ),
$.getScript( "/script2.js" ),
$.Deferred(function( deferred ){
$( deferred.resolve );
})
).done(function(){
// your code
});
另一种方法:
var scripts = ['script1.js','script2.js','script3.js'];
$.getScript(scripts, function(data, textStatus) {
//do something after all scripts have loaded
});