我正在使用$.getScript
进行异步调用,这将调用特定页面所需的脚本。我通过AJAX调用获取脚本以获取我需要的脚本,然后使用$.when
函数按顺序加载它们,我不确定为什么.done()
立即调用,而不是在脚本完全加载时并放置在DOM中,随时可以使用。
例如,AJAX调用返回:
['js/jquery.cookie.js', 'js/leaflet.js', 'js/index.js']
使用此代码:
var loadScripts = function(callback)
{
$.getJSON('url.php', function(response)
{
$['when'].call(this, response).done(function()
{
callback();
});
});
};
通过以下方式致电:
loadScripts(function()
{
// All scripts are loaded and ready to use
// but the callback is fired immediately
// L is undefined
var map = L.map('map-view').setView([51.505, -0.09], 13);
});
我不想使用Head.js或Require.js这样的库,我需要一个简单的脚本,可以加载并等待加载的函数到位,可以使用。请注意,脚本列表也可以更改,顺序也是如此,因此$.when($.getScript(), $.getScript()).done()
不会是我想要的。
我该如何处理?
答案 0 :(得分:1)
你的ajax调用返回一个字符串数组,而不是延迟对象。您需要通过jQuery.getScript
请求它们并存储返回值来实际生成这些字符串延迟对象。
var loadScripts = function(callback) {
$.getJSON('url.php', function(response) {
var defArr = $.map(response,function(url) {
return $.getScript(url);
});
$.when.apply($, defArr).done(callback);
});
};