我正在尝试使用我在其他帖子中找到/编辑的以下代码。 我想使用函数“IsValidImageUrl()”立即返回结果。由于此函数在单独的线程中运行,因此我在获取值时遇到问题,例如,如果我“返回True”;代替“isValid = true;”我总是得到“未定义”作为回报。所以我尝试使用全局变量“isValid”,但它似乎总是落后一步,这意味着我需要调用该函数两次,以获得第一次调用的结果。
我从根本上缺少什么?或者你能提出另一种我能做到的方法吗?
谢谢!
<script>
var isValid;
function IsValidImageUrl(url) {
$("<img>", {
src: url,
error: function() { isValid=false; },
load: function() { isValid=true; }
});
}
IsValidImageUrl("https://www.google.com/logos/2012/hertz-2011-hp.gif");
alert(isValid);
IsValidImageUrl("http://google.com");
alert(isValid);
</script>
答案 0 :(得分:0)
问题是您必须等待图像加载或失败才能使用状态。最好的方法是为IsValidImgUrl函数提供一个回调函数(或成功和失败的单独函数),以便在图像加载或发生错误时运行。
在这个例子中,image元素也被传递给回调函数,以便他们知道调用它们的图像。
function IsValidImageUrl(url, okFunc, errFunc)
{
var image = document.createElement("IMG");
image.src = url;
image.onload = function() {okFunc(image)};
image.onerror = function() {errFunc(image)};
}
function imageLoadSucces(image)
{
alert("image loaded: " + image.src);
}
function imageLoadFail(image)
{
alert("image load error: " + image.src);
}
IsValidImageUrl("https://www.google.com/logos/2012/hertz-2011-hp.gif", imageLoadSucces, imageLoadFail);
IsValidImageUrl("http://google.com", imageLoadSucces, imageLoadFail);
&#13;