在開發(fā)網(wǎng)頁中,我們經(jīng)常需要判斷某張圖片是否存在。比如:當(dāng)用戶上傳頭像之后,我們需要先檢測上傳的圖片是否合法,如果用戶上傳的是一張人造圖片,我們需要將其替換成默認(rèn)頭像。
在Javascript中,我們可以使用Image對象來判斷圖片是否存在。該對象有一個complete屬性,當(dāng)圖片加載完成時,complete屬性值為true。如果圖片加載失敗或者圖片路徑錯誤,則complete屬性為false。
var img = new Image(); img.src = "http://example.com/test.jpg"; if (img.complete) { alert("圖片存在"); } else { alert("圖片不存在或者路徑錯誤"); }
使用Image對象判斷圖片存在的方法,雖然簡單,但是存在一個問題:當(dāng)圖片已經(jīng)存在于緩存中時,complete屬性值為true。無法判斷圖片是否真正存在于服務(wù)器中。因此,我們需要一個更加嚴(yán)格的判斷方式。
下面是一個使用Ajax請求判斷圖片是否存在的例子:
function checkImageExists(url, callback) { var xhr = new XMLHttpRequest(); xhr.onload = function() { if (xhr.status !== 404) { callback(true); } else { callback(false); } }; xhr.onerror = function() { callback(false); }; xhr.open("HEAD", url); xhr.send(); } checkImageExists("http://example.com/test.jpg", function(exists) { if (exists) { alert("圖片存在"); } else { alert("圖片不存在或者路徑錯誤"); } });
通過發(fā)起HEAD請求來判斷圖片是否存在于服務(wù)器中,如果返回的狀態(tài)碼為404,則說明圖片不存在。需要注意的是,由于使用了Ajax方式獲取圖片,因此需要考慮跨域問題。
總的來說,判斷圖片是否存在是網(wǎng)頁開發(fā)中一個常見的問題。我們可以使用Image對象或者Ajax請求的方式進(jìn)行判斷。根據(jù)實際需求,選擇不同的判斷方式。