2015-09-26 85 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/