809 Stimmen

jQuery Ajax-Fehlerbehandlung, Anzeige benutzerdefinierter Ausnahmemeldungen

Gibt es eine Möglichkeit, die ich benutzerdefinierte Ausnahmemeldungen als eine Warnung in meinem jQuery AJAX-Fehlermeldung anzeigen kann?

Wenn ich zum Beispiel eine Ausnahme auf der Serverseite auslösen möchte, und zwar über Streben por throw new ApplicationException("User name already exists"); Ich möchte diese Meldung ("Benutzername existiert bereits") in der jQuery AJAX-Fehlermeldung abfangen.

jQuery("#save").click(function () {
  if (jQuery('#form').jVal()) {
    jQuery.ajax({
      type: "POST",
      url: "saveuser.do",
      dataType: "html",
      data: "userId=" + encodeURIComponent(trim(document.forms[0].userId.value)),
      success: function (response) {
        jQuery("#usergrid").trigger("reloadGrid");
        clear();
        alert("Details saved successfully!!!");
      },
      error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
      }
    });
  }
});

Bei der zweiten Meldung im Fehler-Callback, bei der ich eine Meldung thrownError erhalte ich undefined y el xhr.status Code ist 500 .

Ich bin mir nicht sicher, was ich falsch mache. Was kann ich tun, um dieses Problem zu beheben?

10voto

Diese Funktion generiert grundsätzlich eindeutige, zufällige API-Schlüssel, und falls dies nicht gelingt, erscheint ein Popup-Dialogfeld mit einer Fehlermeldung

In Ansicht Seite:

<div class="form-group required">
    <label class="col-sm-2 control-label" for="input-storename"><?php echo $entry_storename; ?></label>
    <div class="col-sm-6">
        <input type="text" class="apivalue"  id="api_text" readonly name="API" value="<?php echo strtoupper(substr(md5(rand().microtime()), 0, 12)); ?>" class="form-control" />                                                                    
        <button type="button" class="changeKey1" value="Refresh">Re-Generate</button>
    </div>
</div>

<script>
$(document).ready(function(){
    $('.changeKey1').click(function(){
          debugger;
        $.ajax({
                url  :"index.php?route=account/apiaccess/regenerate",
                type :'POST',
                dataType: "json",
                async:false,
                contentType: "application/json; charset=utf-8",
                success: function(data){
                  var result =  data.sync_id.toUpperCase();
                        if(result){
                          $('#api_text').val(result);
                        }
                  debugger;
                  },
                error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
                }

        });
    });
  });
</script>

Vom Controller:

public function regenerate(){
    $json = array();
    $api_key = substr(md5(rand(0,100).microtime()), 0, 12);
    $json['sync_id'] = $api_key; 
    $json['message'] = 'Successfully API Generated';
    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
}

Der optionale Callback-Parameter gibt eine Callback-Funktion an, die ausgeführt werden soll, wenn die load()-Methode abgeschlossen ist. Die Callback-Funktion kann verschiedene Parameter haben:

Art: Function( jqXHR jqXHR, String textStatus, String errorThrown )

Eine Funktion, die aufgerufen wird, wenn die Anfrage fehlschlägt. Die Funktion erhält drei Argumente: Das jqXHR (in jQuery 1.4.x, XMLHttpRequest)-Objekt, eine Zeichenkette, die den Typ des aufgetretenen Fehlers beschreibt, und ein optionales Ausnahmeobjekt, falls eines aufgetreten ist. Mögliche Werte für das zweite Argument (außer null) sind "timeout", "error", "abort" und "parsererror". Wenn ein HTTP-Fehler auftritt, erhält errorThrown den Textteil des HTTP-Status, wie "Not Found" oder "Internal Server Error". Seit jQuery 1.5 kann die Fehlereinstellung ein Array von Funktionen akzeptieren. Jede Funktion wird der Reihe nach aufgerufen. Hinweis: Dieser Handler wird nicht für domänenübergreifende Skript- und JSONP-Anfragen aufgerufen.

7voto

Guy Punkte 11052

Dies ist wahrscheinlich darauf zurückzuführen, dass die JSON-Feldnamen keine Anführungszeichen enthalten.

Ändern Sie die JSON-Struktur von:

{welcome:"Welcome"}

zu:

{"welcome":"Welcome"}

6voto

Edika Punkte 243

Sie haben ein JSON-Objekt der ausgelösten Ausnahme im xhr-Objekt. Verwenden Sie einfach

alert(xhr.responseJSON.Message);

Das JSON-Objekt weist zwei weitere Eigenschaften auf: 'ExceptionType' und 'StackTrace'

5voto

Vitor Silva Punkte 16164

Ich glaube, der Ajax Response Handler verwendet den HTTP-Statuscode, um zu prüfen, ob ein Fehler aufgetreten ist.

Wenn Sie also einfach eine Java-Exception in Ihrem serverseitigen Code auslösen, aber die HTTP-Antwort keinen 500-Statuscode hat, wird jQuery (oder in diesem Fall wahrscheinlich die XMLHttpRequest Objekt) wird einfach davon ausgehen, dass alles in Ordnung war.

Ich sage dies, weil ich ein ähnliches Problem in ASP.NET hatte, wo ich so etwas wie eine ArgumentException("Ich weiß nicht, was zu tun ist...") auslöste, aber der Fehler-Handler wurde nicht ausgelöst.

Ich stelle dann die Response.StatusCode auf 500 oder 200, egal ob ich einen Fehler hatte oder nicht.

5voto

Nuri YILMAZ Punkte 4203

JQuery.parseJSON ist nützlich für Erfolg und Fehler.

$.ajax({
    url: "controller/action",
    type: 'POST',
    success: function (data, textStatus, jqXHR) {
        var obj = jQuery.parseJSON(jqXHR.responseText);
        notify(data.toString());
        notify(textStatus.toString());
    },
    error: function (data, textStatus, jqXHR) { notify(textStatus); }
});

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