Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果链接存在图像,则返回true,否则返回false_Javascript_Image - Fatal编程技术网

Javascript 如果链接存在图像,则返回true,否则返回false

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

我有密码。它正在验证图像的存在性。如果我没有设置“return true”,而是设置了“alert(“exists”);,那么它将非常有效

返回true;返回undefined; 为什么代码不能使用“return true;”

我执行像下面这样的代码
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
})