web-dev-qa-db-ja.com

chromeでのjquery ajaxの問題

私のページでは、FFとIEで次のjqueryコードを実行していますが、chromeがおかしくなっているようです。

fFでIE呼び出しが行われ、結果がChromeのdivに追加されます。失敗するとajaxfailedが呼び出されます。

ajaxFailed関数に渡されるXMLHttpRequestのステータスコードは「200」で、statusTextは「ok」です。 readystateは4で、responseTextは、divに追加したいデータに設定されています。基本的には、失敗メソッドの呼び出しを確認できますが、失敗していません。それは常にクロームで壊れます。

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

私はこの質問が多くの意見を得て、まだ開かれているのを見ました。私はそれを完全に忘れてしまいました。うまくいけば、これで私はそれを閉じることができます。

Datatype引数をなしに設定するか、datatype引数を完全に削除すると、問題が解決します。

私の例では、レンダリングされたビュー(文字列内のHTMLスニペット)を返し、このコードでは、実際にはそうでない場合でも、データ型をjsonに指定しています。他のほとんどのブラウザーは、データ型が正しくない場合はデータ型を無視し、処理を続行するため、htmlの結果を追加できます。

Chromeがエラーをスローします。実際のajaxリクエストは問題なく通過したため、ステータステキストはOK、ステータスコードは200です。問題はリクエスト自体とは何の関係もありません。問題は、返されたデータが私がchromeに伝えたものではないということです。

したがって、chromeは壊れます。 datatype引数を完全に削除すると、chromeは、データを取得したときのデータを把握します。 datatype引数を "html"に設定すると、正常に機能します。

要するに、問題はクロムではありません。それは私です。私はそのように馬鹿だからです。元の質問で提示した例に答えるので、これをこの質問への回答としてマークします。

コメントで、他の人は、この解決策が役に立たない可能性が高い他の状況を説明しました。

12
spaceman

AJAXオペレーションに追加するだけ:async: falsedatatype: "json"、そしてそれはあなたの問題を解決するはずです。 Chromeは、非同期呼び出しの処理に問題があります。

34
MSS

この問題が引き続き発生するかどうかはわかりませんが、今日同様のエラーが発生しました。私は、aspxページを呼び出して、responseTextとChrome=は何も返さなかったという文字列を返しました。他の場所では機能していたが、おそらくいくつかは送信しなかったという、aspxページにResponse.Closeがあったことがわかりました。 Chromeおよび/またはSafariに必要なヘッダーまたは何か。それが誰かを助けることを願っています。

11
Krokador

1日半後には乗り越えたので、プレゼントしてもいいかな・・・.

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

Chrome(Firefoxでは問題ありませんでした)でこれに遭遇し、async: trueをajaxパラメータに追加することで解決しました。

1
Sam Malayek

Dataパラメータを ""に設定してみてください。

GETリクエストの場合、データパラメータがURLに追加されます。なぜChromeに問題があるのか​​わかりませんが、一見の価値があります:)

1
Lobstrosity

成功するためにこれを試してください:

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