1

所以我有这些功能:

function UrlExists(url){
    $.ajax({
      url: url,
      success: function(data){
        alert('exists');
      }, 
      error: function(data){
        alert('fail');
      }
    });
}
function addScript(filepath, callback){
    if (filepath) {
        var fileref = document.createElement('script');
        fileref.setAttribute("type","text/javascript");
        fileref.setAttribute("src", filepath);
        if (typeof fileref!="undefined")
            document.getElementsByTagName("head")[0].appendChild(fileref);
    }
    if (callback) {
        callback();
    }
}

然后在我的$(document).ready()我有一堆这些:

addScript(roofPathMrtu.js);
addScript(roofPathTrtu.js);
addScript(lowerPathMrtu.js);
etc...

然后我需要检查它们是否成功加载,所以我打电话:

UrlExists('roofPathMrtu.js');

问题是这个 UrlExists 函数不起作用,我认为这是因为它在所有 addScript 函数完成之前运行。

我怎样才能让我的 UrlExists 函数只有在所有 addScript 函数都完成后才运行?我打算在最后一个上使用 addScript 函数的回调参数,但我认为这行不通。

4

4 回答 4

1

我一直在这样做的一种方法是不使用 setimeout() 的 javascript 方法,而是使用 jquery 功能 when。如果没有,那么我会使用 Que。语法是

$.when(function()).then(fucntion2());

or

$.when(function1()).done(function2());

如果你愿意,你可以重叠这些,但考虑到代码的优雅和效率,这并不是最好的。使用 que 可能是下一步,使用 $.when 将无法完成您想要的。

http://api.jquery.com/jQuery.when/

于 2013-05-14T23:50:56.670 回答
0

使用 $.Deferred 对象来“监听”各种完成的事件。您可能想要组合一些 $.Deferred 对象并使用 $.when 函数来侦听多个已解决的承诺 http://thiswildorchid.com/jquery-progress-and-promises 查看此链接可能会有所帮助。但听起来你可能需要这个。它对异步函数有很大帮助,你应该看看它是否适合你。

于 2013-05-14T23:29:32.083 回答
0

您要做的是onload在脚本元素上定义一个函数。这并不难,但实现开始看起来很难看。对于您正在处理的特定问题,我建议您查看Require JS

于 2013-05-14T23:46:21.583 回答
0

您的 addScript() 函数将标记插入 dom 并立即返回。此时,浏览器仍然需要获取 src 属性中指定的 javascript 文件。我想 UrlExists() 在执行 addScript() 函数之后但在浏览器有机会获取 javascript 文件之前被调用。

于 2013-05-14T22:24:37.647 回答