2017-01-16 2 views
1

Ich versuche, spezifische Antwort Fehler mit jQuery $ .ajax zu fangen.jQuery AJAX catch Statuscode Fehler

Wenn es eine 500 oder 404 Fehlercode anstelle der Statuscode Funktionen ausgeführt wird, läuft er die Funktion Fehler und ich erhalte eine Warnung statt, was

Hier passieren soll, was aussieht mein Code wie

// get page data 
getPageData: function(url, callback) { 

    url = ajaxLoader.getURL(url); 

    $.ajax({ 
     url: url, 
     type: 'get', 
     data: {_ajax_loader: 1}, 
     error: function(xhr, status) { 
      alert('There was a problem loading that page. You may need to refresh.'); 
     }, 
     statusCode: { 
       404: function(response) { 
        ajaxLoader.fetchPage('/missing'); 
       }, 
       500: function(response) { 
        ajaxLoader.fetchPage('/error'); 
       } 
      }   
    }).done(callback); 
}, 

Antwort

5

Dies ist von Entwurf. error wird ausgeführt, wenn ein Fehler vom Server zurückgegeben wird. Ferner sind die in statusCode definierten Funktionen auch called. Gleiches gilt für complete und success Handler.

Sie könnten Ihre Fehlerbehandlungsroutine so ändern, dass sie nicht ausgeführt wird, wenn der Fehlercode bereits in statusCode definiert ist.

$.ajax({ 
    url: '/echo', 
    type: 'get', 
    success: function() { 
     console.log('ajax.success'); 
    }, 
    error: function(xhr, status) { 
     // check if xhr.status is defined in $.ajax.statusCode 
     // if true, return false to stop this function 
     if (typeof this.statusCode[xhr.status] != 'undefined') { 
      return false; 
     } 
     // else continue 
     console.log('ajax.error'); 
    }, 
    statusCode: { 
     404: function(response) { 
      console.log('ajax.statusCode: 404'); 
     }, 
     500: function(response) { 
      console.log('ajax.statusCode: 500'); 
     } 
    } 
}); 

Demo

-1

Es wird ausgeführt, sowohl die error und entsprechende StatusCode Funktion. Das einzige Problem mit Ihrem Code

ist, dass in den Statusfunktionen, Sie haben das Argument von response (was ich davon ausgehen, ist das Argument für den Erfolg Funktion), wenn es sollte die Fehlerfunktion Argumente entspricht, wie folgt:

Wenn ein 404 oder 500 empfangen wird, werden sowohl die error-Funktion als auch die 404/500-Funktion ausgeführt. Wenn Sie stattdessen nur die 404/500 Funktion auszuführen haben wollen, und die error Funktion wird nur ausgeführt, wenn der zurückgegebene Status nicht 404 oder 500 ist, können Sie dies wie folgt:

// get page data 
getPageData: function(url, callback) { 

    url = ajaxLoader.getURL(url); 

    $.ajax({ 
     url: url, 
     type: 'get', 
     data: {_ajax_loader: 1}, 
     error: function(jqXHR, status) { 
      switch (jqXHR.status) { 
       case 404: 
        ajaxLoader.fetchPage('/missing'); 
        break; 
       case 500: 
        ajaxLoader.fetchPage('/error'); 
        break; 
       default: 
        alert('There was a problem loading that page. You may need to refresh.'); 
      } 
     }   
    }).done(callback); 
}, 
+0

Da die 'statusCode' Funktionen don‘ t ihre Argumente verwenden, welchen Unterschied macht es, welche Argumente er auflistet? – Barmar

+0

Es macht keinen Unterschied, nur um zu zeigen, dass die Fehlerargumente statt der Erfolgsargumente erwartet werden. – bbailes

+0

Sie sagten "Ihr Problem hier ist ...", was bedeutet, dass es der Grund ist, warum es nicht wie beabsichtigt funktioniert. – Barmar