Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在一组其他函数完成后调用一个函数_Javascript_Jquery - Fatal编程技术网

Javascript 在一组其他函数完成后调用一个函数

Javascript 在一组其他函数完成后调用一个函数,javascript,jquery,Javascript,Jquery,我得到了这些函数: function UrlExists(url){ $.ajax({ url: url, success: function(data){ alert('exists'); }, error: function(data){ alert('fail'); } }); } function addScript(filepath, callback){ if (fi

我得到了这些函数:

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函数的callback参数,但我认为这行不通。

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

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

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

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

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

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

我一直在做的一种方法不是使用setimeout()的javascript方法,而是在需要时使用jquery功能。如果不是的话,我会用一个Que。语法是

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

or

$.when(function1()).done(function2());
如果愿意的话,您可以重叠这些代码,但考虑到代码的优雅性和效率,这并不是最好的。使用que可能是下一步,使用$.when将无法实现您想要的功能


我这样做的一种方式不是使用setimeout()的javascript方法,而是在需要时使用jquery特性。如果不是的话,我会用一个Que。语法是

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

or

$.when(function1()).done(function2());
如果愿意的话,您可以重叠这些代码,但考虑到代码的优雅性和效率,这并不是最好的。使用que可能是下一步,使用$.when将无法实现您想要的功能


你在使用jQuery,那么为什么要复制他们的?@zzzzBov因为有很多事情我以前从未听说过:)如果你要的话,也可以。你在使用jQuery,那么为什么要复制他们的?@zzzzBov因为有很多事情我以前从未听说过:)如果你要的话。