Javascript 如果链接存在图像,则返回true,否则返回false
我有密码。它正在验证图像的存在性。如果我没有设置“return true”,而是设置了“alert(“exists”);,那么它将非常有效 返回true;返回undefined; 为什么代码不能使用“return true;” 我执行像下面这样的代码Javascript 如果链接存在图像,则返回true,否则返回false,javascript,image,Javascript,Image,我有密码。它正在验证图像的存在性。如果我没有设置“return true”,而是设置了“alert(“exists”);,那么它将非常有效 返回true;返回undefined; 为什么代码不能使用“return true;” 我执行像下面这样的代码gallery.VerifyImg(“https://jonarhipov.neocities.org/2.png"); var库={ 项目:[], ItemsConstructor:函数ItemsConstructor(img_url){ this
gallery.VerifyImg(“https://jonarhipov.neocities.org/2.png");代码>
var库={
项目:[],
ItemsConstructor:函数ItemsConstructor(img_url){
this.img_url=img_url;
},
CreateItem:函数LoadImage(i){
/*
gallery.items[i]=新项目构造函数(“https://jonarhipov.neocities.org/“+i+”.jpg”);
$(“.gallery”)。附加(“”)*/
},
VerifyImg:函数VerifyImg(url){
var成功;
var img=新图像();
img.src=url;
img.onload=function(){return true;};
img.onerror=函数(){return false;};
}
}
谢谢
VerifyImg: function VerifyImg(url) {
var success;
var img = new Image();
img.src = url;
img.onload = function(){return true;};
img.onerror = function(){return false;};
}
返回true在本例中,代码>从内部函数返回,img.onload
handler,这就是为什么VerifyImg
返回undefined
。您应该执行以下操作(同步解决方案):
这两个版本的代码都不会从服务器上下载整个图像,它们会使用HEAD
请求检查图像是否存在,这样会更快并节省流量。您的方法几乎正确,您只需返回承诺,因为图像加载是异步的:
VerifyImg: function VerifyImg(url) {
var promise = new Promise();
var img = new Image();
img.src = url;
img.onload = promise.resolve;
img.onerror = promise.reject;
return promise;
}
或者使用回调函数代替承诺
var gallery = {
items: [],
ItemsConstructor: function ItemsConstructor(img_url) {
this.img_url = img_url;
},
CreateItem: function LoadImage(i) {
/*
gallery.items[i] = new ItemsConstructor("https://jonarhipov.neocities.org/" + i + ".jpg");
$(".gallery").append("<div class='item' style='background-image: url(" + gallery.items[i].img_url + ")'></div>");*/
},
VerifyImg: function VerifyImg(url,cb) {
var success;
var img = new Image();
img.src = url;
img.onload = cb;
img.onerror = cb;
}
}
您不能从异步方法返回。谢谢!为美沙酮学习它需要很长时间,但它不起作用。也许你用错了它VerifyImage(url)。然后(()=>console.log('exists'))。catch(()=>console.log('notexists'))
return fetch(url, {method: "HEAD"}).then(data => data.status >= 200 && data.status < 400);
VerifyImg: function VerifyImg(url) {
var promise = new Promise();
var img = new Image();
img.src = url;
img.onload = promise.resolve;
img.onerror = promise.reject;
return promise;
}
var gallery = {
items: [],
ItemsConstructor: function ItemsConstructor(img_url) {
this.img_url = img_url;
},
CreateItem: function LoadImage(i) {
/*
gallery.items[i] = new ItemsConstructor("https://jonarhipov.neocities.org/" + i + ".jpg");
$(".gallery").append("<div class='item' style='background-image: url(" + gallery.items[i].img_url + ")'></div>");*/
},
VerifyImg: function VerifyImg(url,cb) {
var success;
var img = new Image();
img.src = url;
img.onload = cb;
img.onerror = cb;
}
}
gallery.VerifyImg(url,function(response) {
console.log(response.type) //returns load or error
})