JQuery Ajax - How to Detect Network Connection error when making Ajax call

前端 未结 8 2224
闹比i
闹比i 2020-11-27 04:02

I have some Javascript JQuery code that does an Ajax call to the server every 5 mins, it\'s to keep the server session alive and keep the user logged in. I\'m using $.

8条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-27 04:30

    USE

    xhr.onerror = function(e){
        if (XMLHttpRequest.readyState == 4) {
            // HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)
            selFoto.erroUploadFoto('Erro HTTP: '+XMLHttpRequest.statusText);
        }
        else if (XMLHttpRequest.readyState == 0) {
            // Network error (i.e. connection refused, access denied due to CORS, etc.)
            selFoto.erroUploadFoto('Erro de rede:'+XMLHttpRequest.statusText);
        }
        else {
            selFoto.erroUploadFoto('Erro desconhecido.');
        }
    
    };
    

    (more code below - UPLOAD IMAGE EXAMPLE)

    var selFoto = {
       foto: null,
    
       upload: function(){
            LoadMod.show();
    
            var arquivo = document.frmServico.fileupload.files[0];
            var formData = new FormData();
    
            if (arquivo.type.match('image.*')) {
                formData.append('upload', arquivo, arquivo.name);
    
                var xhr = new XMLHttpRequest();
                xhr.open('POST', 'FotoViewServlet?acao=uploadFoto', true);
                xhr.responseType = 'blob';
    
                xhr.onload = function(e){
                    if (this.status == 200) {
                        selFoto.foto = this.response;
                        var url = window.URL || window.webkitURL;
                        document.frmServico.fotoid.src = url.createObjectURL(this.response);
                        $('#foto-id').show();
                        $('#div_upload_foto').hide();           
                        $('#div_master_upload_foto').css('background-color','transparent');
                        $('#div_master_upload_foto').css('border','0');
    
                        Dados.foto = document.frmServico.fotoid;
                        LoadMod.hide();
                    }
                    else{
                        erroUploadFoto(XMLHttpRequest.statusText);
                    }
    
                    if (XMLHttpRequest.readyState == 4) {
                         selFoto.erroUploadFoto('Erro HTTP: '+XMLHttpRequest.statusText);
                    }
                    else if (XMLHttpRequest.readyState == 0) {
                         selFoto.erroUploadFoto('Erro de rede:'+XMLHttpRequest.statusText);                             
                    }
    
                };
    
                xhr.onerror = function(e){
                if (XMLHttpRequest.readyState == 4) {
                    // HTTP error (can be checked by XMLHttpRequest.status and XMLHttpRequest.statusText)
                    selFoto.erroUploadFoto('Erro HTTP: '+XMLHttpRequest.statusText);
                }
                else if (XMLHttpRequest.readyState == 0) {
                     // Network error (i.e. connection refused, access denied due to CORS, etc.)
                     selFoto.erroUploadFoto('Erro de rede:'+XMLHttpRequest.statusText);
                }
                else {
                    selFoto.erroUploadFoto('Erro desconhecido.');
                }
            };
    
            xhr.send(formData);
         }
         else{
            selFoto.erroUploadFoto('');                         
            MyCity.mensagens.push('Selecione uma imagem.');
            MyCity.showMensagensAlerta();
         }
      }, 
    
      erroUploadFoto : function(mensagem) {
            selFoto.foto = null;
            $('#file-upload').val('');
            LoadMod.hide();
            MyCity.mensagens.push('Erro ao atualizar a foto. '+mensagem);
            MyCity.showMensagensAlerta();
     }
     };
    

提交回复
热议问题