919 Stimmen

Ajax-Anfrage gibt 200 OK zurück, aber ein Fehlerereignis wird anstelle eines Erfolgs ausgelöst

Ich habe eine Ajax-Anfrage auf meiner Website implementiert, und ich rufe den Endpunkt von einer Webseite aus auf. Er gibt immer zurück 200 OK aber jQuery führt das Fehlerereignis aus.
Ich habe viele Dinge ausprobiert, aber ich konnte das Problem nicht herausfinden. Ich füge meinen Code unten hinzu:

jQuery-Code

var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
function AjaxSucceeded(result) {
    alert("hello");
    alert(result.d);
}
function AjaxFailed(result) {
    alert("hello1");
    alert(result.status + ' ' + result.statusText);
}

C#-Code für JqueryOpeartion.aspx

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

Ich brauche die ("Record deleted") Zeichenfolge nach erfolgreicher Löschung. Ich kann den Inhalt zwar löschen, aber ich erhalte diese Meldung nicht. Ist das richtig oder mache ich etwas falsch? Was ist der richtige Weg, um dieses Problem zu lösen?

3 Stimmen

Können Sie die Ausgabe von JqueryOperation.aspx durch einen JSON-Validator laufen und sehen, ob es gültig JSON

2 Stimmen

Wie jsonlint.de . Sie müssen auch die Parameter überprüfen, die Sie senden. Derzeit haben Sie keinen Parameternamen angegeben. Wenn der Parameter TwitterId dann müssen Sie ein Objekt an data und nicht eine Zeichenkette: data: {TwitterId: row} .

10 Stimmen

Gibt die Seite Jqueryoperation.aspx (gültiges) JSON zurück?

1251voto

Salman A Punkte 246207

jQuery.ajax versucht, den Antwortkörper in Abhängigkeit von der angegebenen dataType oder der Parameter Content-Type Kopfzeile, die vom Server gesendet wird. Wenn die Konvertierung fehlschlägt (z. B. wenn das JSON/XML ungültig ist), wird der Fehler-Callback ausgelöst.


Ihr AJAX-Code enthält:

dataType: "json"

In diesem Fall jQuery:

Wertet die Antwort als JSON aus und gibt ein JavaScript-Objekt zurück. [ ] Die JSON-Daten werden streng geparst; jedes fehlerhafte JSON wird wird zurückgewiesen und ein Parse-Fehler wird ausgelöst. [ ] Eine leere Antwort wird ebenfalls abgelehnt; der Server sollte stattdessen eine Antwort von null oder {} zurückgeben.

Ihr serverseitiger Code gibt ein HTML-Snippet mit 200 OK Status. jQuery erwartete gültiges JSON und feuert daher den Fehler-Callback, der sich über parseerror .

Die Lösung besteht darin, die dataType Parameter aus Ihrem jQuery-Code und lassen Sie den serverseitigen Code zurückkehren:

Content-Type: application/javascript

alert("Record Deleted");

Aber ich würde eher vorschlagen, eine JSON-Antwort zurückzugeben und die Nachricht innerhalb des Erfolgs-Callbacks anzuzeigen:

Content-Type: application/json

{"message": "Record deleted"}

46voto

Philippe Genois Punkte 569

Sie müssen lediglich die dataType: "json" in Ihrem AJAX-Aufruf

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json', //**** REMOVE THIS LINE ****//
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

37voto

jaketrent Punkte 1163

Ich habe gute Erfahrungen mit der Verwendung mehrerer, durch Leerzeichen getrennter dataType s ( jQuery 1.5+ ). Wie in:

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'text json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

24voto

Corvin Punkte 970

Dies ist nur für das Protokoll, da ich auf diesen Beitrag gestoßen bin, als ich nach einer Lösung für mein Problem suchte, das dem des Auftraggebers ähnlich war.

In meinem Fall wurde meine jQuery Ajax-Anfrage aufgrund von Politik der gleichen Herkunft in Chrom. Alles wurde behoben, wenn ich meinen Server (Node.js) geändert zu tun:

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

Es hat mich buchstäblich eine Stunde gekostet, meinen Kopf gegen die Wand zu schlagen. Ich komme mir dumm vor...

15voto

LeftyX Punkte 34880

Ich vermute, dass Ihre aspx-Seite kein JSON-Objekt zurückgibt. Ihre Seite sollte etwas wie dieses tun (page_load)

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

Versuchen Sie auch, Ihre AjaxFailed:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatus sollte Ihnen die Art des Fehlers anzeigen, die Sie erhalten.

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