How to get HTTP status code of

前端 未结 5 1614
逝去的感伤
逝去的感伤 2020-12-07 01:44

I have a page with a lot of images that are generated server-side depending on user actions. And when image loads successfully I\'m happy, but when there is an error on the

相关标签:
5条回答
  • 2020-12-07 01:49

    You have to add an eventListener on images :

    For example with jQuery :

    $('#your_image')
        .error(function(e) {
            //add your unhappy code here
    
            //unbind if needed
            $(this).unbind('error');
        })
        .load(function(e) {
            //add your happy code here
    
            //unbind if needed
            $(this).unbind('load');
        })
        ;
    
    0 讨论(0)
  • 2020-12-07 01:52
     function loadBinaryImageAndInsertToImgTag(imgElement, imageUrl) {
            let xhr = getXMLHttpRequest();
            xhr.onreadystatechange = ProcessResponse;
            xhr.open("GET", imageUrl, true);
            xhr.overrideMimeType('text/plain; charset=x-user-defined');
            xhr.send(null);
    
            function getXMLHttpRequest() {
                let xhr = null;
    
                if (window.XMLHttpRequest || window.ActiveXObject) {
                    if (window.ActiveXObject) {
                        try {
                            xhr = new ActiveXObject("Msxml2.XMLHTTP");
                        } catch (e) {
                            xhr = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                    } else {
                        xhr = new XMLHttpRequest();
                    }
                } else {
                    alert("Your browser does not support XMLHTTP");
                    return null;
                }
                return xhr;
            }
    
            function ProcessResponse() {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200) {
                        imgElement.src = "data:image/jpeg;base64," + encode64(xhr.responseText);
                        imgElement.style.display = "";
                    } else {
                        alert("Error retrieving data!");
                    }
                }
            }
    
            function encode64(inputStr) {
                let b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
                let outputStr = "";
                let i = 0;
    
                while (i < inputStr.length) {
                    let byte1 = inputStr.charCodeAt(i++) & 0xff;
                    let byte2 = inputStr.charCodeAt(i++) & 0xff;
                    let byte3 = inputStr.charCodeAt(i++) & 0xff;
                    let enc1 = byte1 >> 2;
                    let enc2 = ((byte1 & 3) << 4) | (byte2 >> 4);
                    let enc3, enc4;
                    if (isNaN(byte2)) {
                        enc3 = enc4 = 64;
                    }
                    else {
                        enc3 = ((byte2 & 15) << 2) | (byte3 >> 6);
                        if (isNaN(byte3)) {
                            enc4 = 64;
                        }
                        else {
                            enc4 = byte3 & 63;
                        }
                    }
                    outputStr += b64.charAt(enc1) + b64.charAt(enc2) + b64.charAt(enc3) + b64.charAt(enc4);
                }
                return outputStr;
            }
        }
    
    0 讨论(0)
  • 2020-12-07 01:56

    You may combine the couple technics to get img.status:

    <img src="/no.img" onerror="error(this)">
    
    function error(img) {
       var r = makeXMLHttpRequestAgain(img.src);
       if (r.status === 500) img.src = '/e500.img';
       if (r.status === 503) img.src = '/e503.img';
    }
    
    0 讨论(0)
  • 2020-12-07 02:05

    No, there is no way to get the HTTP status from a request made by an img tag in JavaScript.

    You could write a firefox plugin, chrome/safari extension to do that.

    An alternative would be using AJAX to load your images (not using img tags). You can get Http Status Codes from Ajax Requests.

    0 讨论(0)
  • 2020-12-07 02:13

    You cannot check HTTP status this way. However you can check if image was loaded or not using naturalWidth property.

    if (img.naturalWidth === 0) {
        // do sth
    }
    

    Hope it help.

    0 讨论(0)
提交回复
热议问题