it-swarm.com.de

jquery Ajax Problem in Chrom

ich habe den folgenden Jquery-Code, der auf meiner Seite in FF und IE läuft, aber Chrome scheint auszuflippen.

in FF und IE wird der Aufruf gemacht und das Ergebnis wird an das div . in Chrome angehängt, es ruft bei Fehlschlag ajaxfailed auf.

das an die AjaxFailed-Funktion übergebene XMLHttpRequest hat den Statuscode "200" und der StatusText ist "OK". Der Readystate ist 4 und der ResponseText ist auf die Daten eingestellt, die ich an das Div anhängen möchte. Im Grunde von dem, was ich sehen kann, wie er die Fehlermethode nennt, aber es schlägt nicht fehl. Ich habe sowohl mit Get- als auch mit Post-Requests und versucht 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);
    }
21
spaceman

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

Wenn Sie das Datentyp-Argument auf nichts setzen oder sogar das Datentyp-Argument vollständig entfernen, wird das Problem gelöst.

In meinem Beispiel gebe ich eine gerenderte Ansicht zurück (ein HTML-Snippet in string), und in diesem Code gebe ich den Datentyp Json an, wenn es wirklich nicht der Fall ist. Die meisten anderen Browser scheinen den Datentyp zu ignorieren, wenn er falsch ist und mit dem Leben weitergeht, sodass ich das HTML-Ergebnis anfügen kann.

Chrome gibt einen Fehler aus ..__ Der Statustext ist OK, der Statuscode ist 200, da die eigentliche Ajax-Anforderung gut durchgegangen ist. Das Problem hat nichts mit der Anfrage selbst zu tun, das Problem ist, dass die zurückgegebenen Daten nicht das sind, was ich von Chrome gesagt habe.

So bricht Chrome . Wenn ich das Datentyp-Argument vollständig entferne, ermittelt Chrome, was die Daten sind, wenn sie abgerufen werden. Wenn ich das Datentyp-Argument auf "html" setze, funktioniert es auch einwandfrei.

Lange Rede, 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 vorgebracht habe. 

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

12
spaceman

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

34
MSS

Ich weiß nicht, ob Sie dieses Problem immer noch haben, aber ich bin gerade heute auf einen ähnlichen Fehler gestoßen. Ich habe eine ASPX-Seite aufgerufen, um eine Antwort 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 funktionierte, aber wahrscheinlich keine erforderlichen Header oder etwas an Chrome und/oder Safari schickte. Hoffe das hilft jemandem.

11
Krokador

nach anderthalb tagen habe ich es überstanden.

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);
  }
}
7
spaceman

Setzen Sie den Datenparameter auf "".

Bei GET-Anforderungen wird der Datenparameter an die URL angehängt. Nicht sicher, warum Chrome ein Problem damit hat, aber es ist einen Versuch wert :)

1
Lobstrosity

Ich bin einfach in Chrome darauf gestoßen (war in Firefox in Ordnung) und das Hinzufügen von async: true zu den Ajax-Parametern löste es.

0
LXXIII

Versuchen Sie dies für den Erfolg: 

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