Jquery Ajax Problem in Chrom

Ich habe den folgenden jQuery-Code auf meiner Seite in FF und IE gut, aber Chrom scheint ausflippen.

In FF und IE wird der Aufruf gemacht und das Ergebnis wird an das div angehängt. In Chrome nennt es bei Versagen Ajaxed.

Der an die AjaxFailed-function übergebene XMLHttpRequest hat einen Statuscode von “200” und der statusText ist “ok”. der ready-state ist 4 und der responseText wird auf die Daten gesetzt, die ich an die div. anhängen möchte. im Grunde von dem, was ich sehen kann, ruft die fehlgeschlagene Methode, aber es ist nicht scheitern .. Ich habe versucht mit beiden bekommen und Post-Anfragen und Es bricht immer in Chrom.

function getBranchDetails(contactID, branchID) { $.ajax({ type: "GET", url: urlToRequestTo, data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: branchDetailsSuccess, error: AjaxFailed }); } function branchDetailsSuccess(result) { $("#divBranchControl").empty(); $("#divBranchControl").append(" " + result); $("#branchDiv").tabs(); } function AjaxFailed(result) { alert("FAILED : " + result.status + ' ' + result.statusText); } 

Fügen Sie in der AJAX-Operation einfach async: false hinzu: async: false nach dem datatype: "json" , und das sollte Ihr Problem lösen. Chrome hat Probleme mit asynchronen Aufrufen.

Ich habe gerade gesehen, dass diese Frage viele Ansichten bekommen hat und immer noch offen ist. Ich habe es komplett vergessen und hoffentlich kann ich damit schließen.

Wenn Sie das Argument “data- type” auf “nothing” setzen oder das Argument “data- type” vollständig entfernen, wird das Problem getriggers.

In meinem Beispiel gebe ich eine gerenderte Ansicht (ein HTML-Snippet in einer Zeichenfolge) zurück und in diesem Code spezifiziere ich den Datentyp für json, wenn dies wirklich nicht der Fall ist. Die meisten anderen Browser scheinen den Datentyp zu ignorieren, wenn er inkorrekt ist, und gehen mit dem Leben weiter, so dass ich das HTML-Ergebnis anhängen kann.

Chrome gibt einen Fehler aus. Der Statustext ist in Ordnung, der Statuscode ist 200, weil die tatsächliche Ajax-Anfrage gut abgelaufen ist. Das Problem hat nichts mit der Anfrage selbst zu tun, das Problem ist, dass die zurückgegebenen Daten nicht das sind, was ich Chrome gesagt habe.

Also bricht Chrom. Wenn ich das Datentypargument vollständig entferne, kann chrome herausfinden, was die Daten sind, wenn sie es bekommen. Wenn ich das Argument des Datentyps auf “html” setze, funktioniert es auch gut.

Lange Rede, kurzer Sinn, das Problem ist nicht Chrom. Da ich bin. Weil ich so dumm bin. Ich bezeichne dies als Antwort auf diese Frage, da sie das Beispiel beantwortet, das ich in der ursprünglichen Frage vorgestellt habe.

In den Kommentaren haben andere andere Situationen beschrieben, in denen diese Lösung höchstwahrscheinlich nicht helfen wird.

Ich weiß nicht, ob Sie dieses Problem immer noch haben, aber ich habe heute einen ähnlichen Fehler festgestellt. Ich habe eine aspx-Seite aufgerufen, um eine Zeichenfolge mit responseText zurückzugeben, und Chrome hat nie etwas zurückgegeben. Es stellte sich heraus, dass ich eine Response.Close in meiner aspx-Seite hatte, die überall sonst funktionierte, aber wahrscheinlich nicht einige erforderliche Header oder etwas an Chrome und / oder Safari gesendet hat. Hoffe das hilft jemandem.

nach anderthalb Tagen bin ich darüber hinweggekommen, also darf ich vorstellen …..

 function getBranchDetails(contactID, branchID) { $.ajax({ type: "GET", url: urlToRequestTo, data: "", contentType: "application/json; charset=utf-8", dataType: "json", success: branchDetailsSuccess, error: branchAjaxFailed }); } function branchDetailsSuccess(result) { $("#divBranchControl").empty(); $("#divBranchControl").append(" " + result); $("#branchDiv").tabs(); } function branchAjaxFailed(result) { if (result.status == 200 && result.statusText == "OK") { //this is here only because chrome breaks on this method only for no reason whatsoever. //chrome sees the request as failed, but everything happens fine... branchDetailsSuccess(result.responseText); } else { alert("FAILED : " + result.status + ' ' + result.statusText); } } 

Versuchen Sie, den Datenparameter auf “” zu setzen.

Bei GET Anfragen wird der Datenparameter an die URL angehängt. Nicht sicher, warum Chrome ein Problem damit hätte, aber es ist einen Versuch wert 🙂

Versuchen Sie dies für den Erfolg:

 success: function(response) { branchDetailsSuccess(response); }, 

Verwenden Sie die POST-Methode im Servlet und ändern Sie den type:POST in $.ajax .