Ich habe eine Ajax-Anfrage auf meiner Website implementiert und rufe den Endpunkt von einer Website aus an. Es gibt immer 200 OK zurück, 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:
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);
}
JqueryOpeartion.aspx
protected void Page_Load(object sender, EventArgs e) {
test();
}
private void test() {
Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}
Ich benötige den ("Record deleted")
-String nach dem erfolgreichen Löschen. Ich kann den Inhalt löschen, erhalte diese Nachricht jedoch nicht. Ist das richtig oder mache ich etwas falsch? Was ist der richtige Weg, um dieses Problem zu lösen?
jQuery.ajax
versucht, den Antworttext in Abhängigkeit von dem angegebenen dataType
-Parameter oder dem vom Server gesendeten Content-Type
-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:
dataType: "json"
In diesem Fall jQuery:
Wertet die Antwort als JSON aus und gibt ein JavaScript-Objekt zurück. […] Die JSON-Daten werden streng analysiert. Jede fehlerhafte JSON ist abgelehnt und ein Parser-Fehler wird ausgegeben. […] Eine leere Antwort ist auch abgelehnt; Der Server sollte stattdessen eine Antwort von null oder {} zurückgeben.
Ihr serverseitiger Code gibt ein HTML-Snippet mit dem Status 200 OK
zurück. jQuery erwartete gültige JSON und löst daher den Fehler-Callback aus, der sich über parseerror
beschwert.
Die Lösung besteht darin, den Parameter dataType
aus Ihrem jQuery-Code zu entfernen und den serverseitigen Code zurückzugeben:
Content-Type: application/javascript
alert("Record Deleted");
Ich würde jedoch eher vorschlagen, eine JSON-Antwort zurückzugeben und die Nachricht im Erfolgs-Callback anzuzeigen:
Content-Type: application/json
{"message": "Record deleted"}
Ich hatte viel Glück mit mehreren, durch Leerzeichen getrennten 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
});
Sie müssen lediglich den dataType: "json" in Ihrem AJAX - Aufruf entfernen
$.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
});
Dies ist nur für die Aufzeichnung, da ich auf diesen Beitrag gestoßen bin, als ich nach einer Lösung für mein Problem suchte, die den OPs ähnlich war.
In meinem Fall wurde meine jQuery-Ajax-Anfrage aufgrund der - Same-Origin-Richtlinie in Chrome nicht erfolgreich ausgeführt. Alles wurde behoben, als ich meinen Server (Node.js) für folgende Zwecke modifizierte:
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 fühle mich dumm ...
Ich glaube, Ihre Aspx-Seite gibt kein JSON-Objekt zurück.
var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);
Response.Write(OutPut);
Versuchen Sie auch, Ihr AjaxFailed zu ändern:
function AjaxFailed (XMLHttpRequest, textStatus) {
}
textStatus
sollte Ihnen die Art des Fehlers anzeigen, den Sie erhalten.
Ich habe dieses Problem mit einer aktualisierten jQuery-Bibliothek konfrontiert. Wenn die Servicemethode nichts zurückgibt, bedeutet dies, dass der Rückgabetyp void
ist.
Dann erwähnen Sie bitte in Ihrem Ajax-Anruf dataType='text'
.
Es wird das Problem lösen.
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.
Ich hatte das gleiche Problem. Mein Problem war, dass mein Controller einen Statuscode anstelle von JSON zurückgegeben hat. Stellen Sie sicher, dass Ihr Controller Folgendes zurückgibt:
public JsonResult ActionName(){
// Your code
return Json(new { });
}
Verwenden Sie den folgenden Code, um sicherzustellen, dass die Antwort im JSON-Format (PHP-Version) vorliegt ...
header('Content-Type: application/json');
echo json_encode($return_vars);
exit;
Sieh dir das an . Es ist auch ein ähnliches Problem. Ich habe versucht zu arbeiten.
dataType: 'JSON',
nicht entfernen
Hinweis: Nur Echo-JSON-Formate in der Datei PHP), wenn Sie nur PHP-Echo für Ihren Ajax-Code verwenden. 200
Eine andere Sache, die Dinge durcheinander brachte, war localhost
anstelle von 127.0.0.1 oder umgekehrt. Anscheinend kann JavaScript keine Anfragen von einem zum anderen verarbeiten.
Ich habe ein ähnliches Problem, aber als ich versuchte, den Datentyp zu entfernen: 'json' Ich habe immer noch das Problem. Mein Fehler wird anstelle des Erfolgs ausgeführt
function cmd(){
var data = JSON.stringify(display1());
$.ajax({
type: 'POST',
url: '/cmd',
contentType:'application/json; charset=utf-8',
//dataType:"json",
data: data,
success: function(res){
console.log('Success in running run_id ajax')
//$.ajax({
// type: "GET",
// url: "/runid",
// contentType:"application/json; charset=utf-8",
// dataType:"json",
// data: data,
// success:function display_runid(){}
// });
},
error: function(req, err){ console.log('my message: ' + err); }
});
}
Ich hatte das gleiche Problem. Dies liegt daran, dass meine JSON-Antwort einige Sonderzeichen enthält und die Server-Datei nicht mit UTF-8 codiert wurde. Daher war der Ajax-Aufruf der Ansicht, dass dies keine gültige JSON-Antwort war.
Wenn Sie JSON immer vom Server zurückgeben (keine leeren Antworten), sollte dataType: 'json'
funktionieren und contentType
ist nicht erforderlich. Stellen Sie jedoch sicher, dass die JSON-Ausgabe ...
jQuery AJAX wirft einen 'parseerror' auf gültige, aber unserialisierte JSON!