今天作項目的時候,遇到一個比較奇葩的問題,將後臺返回的圖片地址連接綁在img標籤的scr上的時候,有時候會偶發的不顯示,可是將後臺返回的地址複製到瀏覽器,又能直接打開,我跑過去問後端,他說他知道這個問題,也說了半天,反正意思就是,這個問題之前就存在,確實後臺存在問題,可是由於某些緣由,他解決不了,看看咱們前端能不能曲線救國,我暈,那沒辦法了,測試已經把bug提給我了,只能我本身想辦法了;出於對公司信息安全的考慮,我就不貼我在公司寫項目代碼了,我下面寫個小demo來講明解決這種狀況的原理,具體使用請根據你們的項目自行變通:html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <!-- 由於這個圖片地址是沒問題的 --> <!-- 若是後臺出現問題, 就會走下面的img1.onerror方法--> <img id="img1" src="http://p4.so.qhimg.com/t018349127914f495ce.jpg" alt="" srcset=""> </body> </html> <script> var img1 = document.getElementById('img1') var i = 0 //初始化圖片加載失敗請求次數 // 圖片一旦加載成功了的時候,就會調用這個函數 img1.onload = function (param) { console.log('圖片加載成功') } //當每次圖片加載失敗了,都會調用這個函數 img1.onerror = function (err) { if(i>10){ //圖片加載失敗函數是否調用超10次?若是超10次,就return //避免無限制的發送請求 return } //在連接後面拼接'?'+Math.random() 是爲了每次請求清除圖片緩存, //避免再次請求的時候調用了上次無用的地址 err.target.src = "http://p4.so.qhimg.com/t018349127914f495ce.jpg"+'?'+Math.random(); i++ } </script>