javascript - 为什么我的函数没有返回 true?

标签 javascript jquery

我有这个函数来测试脚本是否已加载:

function urlExists(url){
    $.ajax({
      url: url,
      success: function(data){
        //alert(url + ' exists');
        console.log(url + ' exists');
        return true
      }, 
      error: function(data){
        //alert(url + ' failed to load');
        console.log(url + ' failed to load');
        return false
      }
    });
}

然后我这样调用它:

if (urlExists('file.js')) {
    var rm = true;
}

但是即使我从 console.log 中得到该 url 存在的信息,我的 var rm 仍然未定义。

我尝试使用 Arun P Johny 的解决方案,如下所示:

urlExists('file.js', function(result){ 
    if(result){
        rm = true;
    }
});

但是即使 file.js 存在,rm 仍然是未定义的,并且我得到的控制台日志是这样说的。

最佳答案

更新: 正如 @phant0m 指出的,您不会从 urlExists 返回任何值,两个 return 语句都是传递给 ajax 调用的回调方法的一部分。因此,您的 urlExists() 始终返回未定义,导致 if 条件失败。

因为 urlExists 使用本质上是异步的 ajax 调用,这意味着一旦请求发送到服务器 urlExists 方法就存在返回 undefined 导致你的 if 条件失败。

在这种情况下,解决方案是使用回调方法,一旦异步任务完成,该方法就会执行结果。

在这种情况下,我们可以更改 urlExists 以接受下面给出的回调函数,并使用 truefalse 调用回调,具体取决于ajax 调用的结果。

function urlExists(url, callback){
    $.ajax({
      url: url,
      success: function(data){
        //alert(url + ' exists');
        console.log(url + ' exists');
        callback(true)
      }, 
      error: function(data){
        //alert(url + ' failed to load');
        console.log(url + ' failed to load');
        callback(false)
      }
    });
}

然后

urlExists('file.js', function(result){
    if(result){
    }
})

关于javascript - 为什么我的函数没有返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569445/

相关文章:

javascript - 如何从 Angular 中的其他函数访问工厂函数

javascript - JavaScript中如何将局部变量变成全局变量

javascript - 如何最好地触发文件删除事件?

javascript - 有没有办法让 chrome 打包的应用程序处理 Http BasicAuthentication

javascript - 以 html 形式预先填充来自 Ajax 的数据

javascript - 卸载前的窗口显示两个对话框

javascript/jquery 值 .get().attr()

jquery - 删除页面底部的类

jquery - 在 jQuery 中触发 keyup 事件

javascript - 在 Javascript 中突出显示单词 - 为什么在页面完全加载后它们不会保持突出显示?