Ich habe eine Ajax-Anfrage auf meiner Website implementiert und rufe den Endpunkt von einer Webseite aus auf. Es wird immer 200 OK zurückgegeben , 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 erfolgreichem Löschen. Ich kann den Inhalt löschen, erhalte diese Meldung jedoch nicht. Ist das richtig oder mache ich etwas falsch? Was ist der richtige Weg, um dieses Problem zu lösen?
TwitterId
, müssen Sie ein Objekt übergebendata
, nicht eine Zeichenfolge :data: {TwitterId: row}
.Antworten:
jQuery.ajax
versucht, den Antworttext abhängig vom angegebenendataType
Parameter oder demContent-Type
vom Server gesendeten Header zu konvertieren . Wenn die Konvertierung fehlschlägt (z. B. wenn JSON / XML ungültig ist), wird der Fehlerrückruf ausgelöst.Ihr AJAX-Code enthält:
In diesem Fall jQuery:
Ihr serverseitiger Code gibt ein HTML-Snippet mit
200 OK
Status zurück. jQuery erwartete einen gültigen JSON und löst daher den Fehler-Rückruf aus, über den er sich beschwertparseerror
.Die Lösung besteht darin, den
dataType
Parameter aus Ihrem jQuery-Code zu entfernen und den serverseitigen Code zurückzugeben:Ich würde jedoch eher vorschlagen, eine JSON-Antwort zurückzugeben und die Nachricht im Erfolgsrückruf anzuzeigen:
quelle
$.ajax
Sie es versuchen können$.getScript
. In das serverseitige C # -Skript setzen Sie einfachalert('Record Deleted');
(kein<script>
Tag) und setzen den ContentType Ihres C # -Skripts auftext/javascript
.$.ajax
könnte auch funktionieren, aber ich kann mich nicht erinnern, wie, vielleicht müssen Sie nur änderndataType: 'script',
. Möglicherweise benötigen Sie den Erfolgshandler nicht mehr.$.post
. In diesem Fall errät jquery einen Datentyp und tritt dann auf, wenn das Parsen fehlschlägt . Dies ist eine wirklich böse, schwer zu findende Gotcha. Ich habe es behoben, indem ich den Datentyp auf gesetzt habe"text"
.Ich hatte etwas Glück mit der Verwendung mehrerer durch Leerzeichen getrennter
dataType
s ( jQuery 1.5+ ). Wie in:quelle
Sie müssen lediglich den Datentyp "json" in Ihrem AJAX-Aufruf entfernen
quelle
Dies ist nur zur Veranschaulichung, da ich auf diesen Beitrag gestoßen bin, als ich nach einer Lösung für mein Problem gesucht habe, die den OPs ähnlich war.
In meinem Fall wurde der Erfolg meiner jQuery Ajax-Anforderung aufgrund der Richtlinie mit demselben Ursprung in Chrome verhindert. Alles wurde behoben, als ich meinen Server (Node.js) geändert habe, um Folgendes zu tun:
Es hat mich buchstäblich eine Stunde gekostet, meinen Kopf gegen die Wand zu schlagen. Ich fühle mich dumm ...
quelle
Ich gehe davon aus, dass Ihre Aspx-Seite kein JSON-Objekt zurückgibt. Ihre Seite sollte ungefähr so aussehen (page_load)
Versuchen Sie auch, Ihr AjaxFailed zu ändern:
textStatus
sollte Ihnen die Art des Fehlers geben, den Sie erhalten.quelle
Ich habe dieses Problem mit einer aktualisierten jQuery-Bibliothek konfrontiert. Wenn die Servicemethode nichts zurückgibt, bedeutet dies, dass der Rückgabetyp lautet
void
.Dann erwähnen Sie bitte in Ihrem Ajax-Anruf
dataType='text'
.Es wird das Problem lösen.
quelle
Sie müssen nur
dataType: 'json'
aus Ihrem Header entfernen, wenn Ihre implementierte Webdienstmethode ungültig ist.In diesem Fall erwartet der Ajax-Aufruf keinen JSON-Rückgabedatentyp.
quelle
Verwenden Sie den folgenden Code, um sicherzustellen, dass die Antwort im JSON-Format (PHP-Version) vorliegt ...
quelle
Ich hatte das gleiche Problem. Mein Problem war, dass mein Controller anstelle von JSON einen Statuscode zurückgab. Stellen Sie sicher, dass Ihr Controller Folgendes zurückgibt:
quelle
Ich habe das ähnliche Problem, aber als ich versuchte, den Datentyp 'json' zu entfernen, habe ich immer noch das Problem. Mein Fehler wird anstelle des Erfolgs ausgeführt
quelle
Eine andere Sache, die die Dinge für mich durcheinander gebracht hat, war die Verwendung
localhost
von 127.0.0.1 oder umgekehrt. Anscheinend kann JavaScript keine Anfragen von einem zum anderen verarbeiten.quelle
Sehen Sie das . Es ist auch ein ähnliches Problem. Ich habe es versucht.
Nicht entfernen
dataType: 'JSON',
Hinweis: Nur JSON-Format in PHP-Datei wiedergeben, wenn Sie nur PHP-Echo verwenden. Ihr Ajax-Code gibt 200 zurück
quelle
Ich hatte das gleiche Problem. Dies lag daran, dass meine JSON-Antwort einige Sonderzeichen enthält und die Serverdatei nicht mit UTF-8 codiert wurde. Daher wurde beim Ajax-Aufruf davon ausgegangen, dass dies keine gültige JSON-Antwort ist.
quelle
Wenn Sie JSON immer vom Server zurückgeben (keine leeren Antworten),
dataType: 'json'
sollte dies funktionieren undcontentType
wird nicht benötigt. Stellen Sie jedoch sicher, dass die JSON-Ausgabe ...jQuery AJAX wirft einen 'Parseerror' auf gültigen, aber unserialisierten JSON!
quelle
Ihr Skript erfordert eine Rückgabe im JSON-Datentyp.
Versuche dies:
quelle
Versuchen Sie Folgendes
ODER
Verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen im JSON-Objekt. Ich denke, das wird das Problem lösen.
quelle