完成一堆其他功能后调用函数

时间:2013-05-14 22:14:18

标签: javascript jquery

所以我有这些功能:

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函数完成之前运行。

如何在完成所有addScript功能后才能运行我的UrlExists功能?我打算在最后一个上使用addScript函数的回调参数,但我不认为这会起作用。

4 个答案:

答案 0 :(得分:1)

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

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

or

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

如果您愿意,可以重叠这些,但在考虑代码的优雅和效率时,它不是最好的。使用$可能是下一步,使用$。时不会达到你想要的效果。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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