8 Stimmen

JQuery AJAX Prefilter verwenden, um Antwortdaten zu prüfen und bedingt an den 'Error' Event Handler weiterzuleiten

Ich kann weit vom Kurs sein, aber ich fragte mich, ob es möglich ist, die JQuery verwenden Vorfilter Funktionalität und analysieren die Antwortdaten in einem Ajax Success und leiten sie bedingt an die error Ereignisbehandler in meinem ajax Aufrufe auf der Grundlage der Existenz bestimmter Elemente in meinem zurückgegebenen JSON (Fehlermeldungen).

Es wäre schön, wenn dies global für jede Ajax-Funktion auf der Seite eingestellt werden könnte.

Vielleicht ist dies nicht der beste Weg, um dies zu tun; wenn jemand eine alternative Idee hat, bitte lassen Sie es mich wissen!

Der Vorfilter:

//only run prefilter on ajax calls expecting JSON back in response, would this 
//be the right way to do this? 
$.ajaxPrefilter( "json", function( options, originalOptions, jqXHR ) {
    jqXHR.success(function(data, textStatus, jXHR) {
        if( hasErrors(data) ) {
           //forward to error event handler?
        }
    });
});

Ajax-Anruf:

$.ajax({
      type:     "POST",
      data:     {  
                    theData: "someData"                    
                },
      url:      theUrl,
      dataType: 'json',
      cache:    false,          
      success:  function (data, textStatus, jqXHR) {
                    //do stuff on success
                }
      error:    function ( jqXHR, textStatus, errorThrown ) {
                    //I want to do this stuff if data contains errors from server
                } 
 });

Ich danke Ihnen vielmals!

16voto

antonioh Punkte 2914

Ich mache es folgendermaßen: Ich speichere die ursprüngliche Erfolgsfunktion (spezifisch für jede Anfrage) und füge dann einen weiteren Rückruf hinzu. Wenn es keine Fehler gab, rufe ich den ursprünglichen Callback auf:

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    var originalSuccess = options.success;

    options.success = function (data) {
        if(hasErrors(data)) {
           //forward to error event handler or redirect to login page for example
        }
        else {
            if (originalSuccess != null) {
                originalSuccess(data);
            }
        }   
    };
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X