This question already has answers here:
How do I return the response from an asynchronous call?
(38个答案)
6年前关闭。
我有这个功能来测试是否加载了脚本:
然后我以这种方式称呼它:
但是,即使我获得该URL存在的console.log,我的var rm仍然是未定义的。
我尝试像这样使用Arun P Johny的解决方案:
但是,即使file.js存在,rm仍然是未定义的,并且我得到了表明这样的控制台日志。
然后
(38个答案)
6年前关闭。
我有这个功能来测试是否加载了脚本:
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;
}
但是,即使我获得该URL存在的console.log,我的var rm仍然是未定义的。
我尝试像这样使用Arun P Johny的解决方案:
urlExists('file.js', function(result){
if(result){
rm = true;
}
});
但是,即使file.js存在,rm仍然是未定义的,并且我得到了表明这样的控制台日志。
最佳答案
更新:
正如@ phant0m指出的那样,您没有从urlExists
返回任何值,这两个return语句都是传递给ajax调用的回调方法的一部分。因此,您的urlExists()
始终返回undefined,从而导致if
条件失败。
因为urlExists
使用的ajax调用本质上是异步的,这意味着一旦将请求发送到服务器,就会存在urlExists
方法,返回undefined
会导致if条件失败。
在这种情况下,解决方案是使用回调方法,一旦异步任务完成,该方法将与结果一起执行。
在这种情况下,我们可以更改urlExists
以接受如下所示的回调函数,并根据ajax调用的结果使用true
或false
调用回调。
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){
}
})
10-02 18:10