web-dev-qa-db-fra.com

jquery ajax problem in chrome

j'ai le code jQuery suivant en cours d'exécution sur ma page très bien dans FF et IE, mais chrome semble être paniquer ..

dans FF et IE, l'appel est effectué et le résultat est ajouté à la div . en chrome, il appelle ajaxfailed en cas d'échec.

xMLHttpRequest transmis à la fonction AjaxFailed a un code d'état de "200" et le statusText est "ok". le readystate est 4 et le responseText est défini sur les données que je souhaite ajouter à la division .. essentiellement de ce que je peux voir appeler la méthode d'échec, mais ce n'est pas un échec .. j'ai essayé avec les requêtes get et post et ça casse toujours en chrome. 

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

Je viens de voir que cette question a suscité beaucoup d'opinions et qu'elle est toujours ouverte. J'avais complètement oublié ça et j'espère que cela me permettra de le fermer.

En réglant l'argument de type de données sur rien, ou même en supprimant complètement l'argument de type de données, le problème sera résolu.

Dans mon exemple, je renvoie une vue rendue (un extrait html sous forme de chaîne) et dans ce code, je spécifie le type de données à json, mais ce n'est pas le cas. La plupart des autres navigateurs semblent ignorer le type de données s'il est incorrect et continuer avec la vie, me permettant d'ajouter le résultat HTML.

Chrome génère une erreur ... Le texte du statut est OK, le code du statut est 200, car la demande ajax réelle a bien fonctionné. Le problème n'a rien à voir avec la demande elle-même, le problème est que les données renvoyées ne correspondent pas à ce que j'ai dit à Chrome.

Donc, chrome se casse… .. Si je supprime l’argument du type de données, chrome déterminera ce que sont les données quand elles les auront. Si je règle l'argument de type de données sur "html", cela fonctionnera également très bien.

Longue histoire courte, le problème n'est pas chrome. C'est moi. Parce que je suis idiot comme ça. Je marque ceci comme étant la réponse à cette question, comme cela répond à l'exemple que j'ai présenté dans la question initiale. 

Dans les commentaires, d'autres ont décrit d'autres situations dans lesquelles cette solution ne va probablement pas aider. 

12
spaceman

Dans l'opération AJAX, ajoutez simplement: async: false après datatype: "json", ce qui devrait résoudre votre problème. Chrome a un problème de traitement des appels asynchrones.

34
MSS

Je ne sais pas si vous avez toujours ce problème, mais j'ai rencontré une erreur similaire aujourd'hui. J'appelais une page aspx pour renvoyer une chaîne avec responseText et Chrome ne renvoyait jamais rien. Il s'est avéré que j'avais une Response.Close dans ma page aspx qui fonctionnait partout mais n'a probablement pas envoyé les en-têtes requis ou quelque chose de ce genre à Chrome et/ou Safari J'espère que ça aide quelqu'un.

11
Krokador

après un jour et demi, je l’ai surmonté, puis-je vous présenter .....

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

Essayez de régler le paramètre de données sur "".

Pour les demandes GET, le paramètre data est ajouté à l'URL. Je ne sais pas pourquoi Chrome aurait un problème avec ça, mais ça vaut le coup d'essayer :)

1
Lobstrosity

Je viens de rencontrer ceci dans Chrome (tout allait bien dans Firefox) et l'ajout de async: true aux paramètres ajax l'a résolu.

0
LXXIII

Essayez ceci pour réussir: 

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