我有这个函数来测试脚本是否已加载:
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
以接受下面给出的回调函数,并使用 true
或 false
调用回调,具体取决于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/