2015-09-26 61 views
1

我遇到了一个问题,我需要AJAX加载一些脚本,并且只有脚本被加载并解析/执行后,如果回调函数应该触发。jQuery - 脚本加载并执行后触发AJAX回调?

似乎ajax请求会在脚本下载后触发回调,但不一定在执行时。有没有办法做到这一点,而不是使用超时等等?

 $.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

那么你可以在'script1.js'之外声明一个全局变量'myGlobalVar = 0',然后你的script1.js将它的值修改为1.然后在你的'.success'回调函数中,你可以把'while(myGlobalVar == 0)'....直到它是1 –

回答

1

你应该看看到jquerys

将允许你完成多个异步(AJAX)方法执行后,执行代码。

从jQuery文档:

描述:提供一种方法基于一个 或多个对象,表示异步 事件通常递延对象执行回调函数。

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 
}); 

编号:http://www.sitepoint.com/getscript-mutiple-scripts/