web-dev-qa-db-ja.com

Firefoxによって中止されたAjax投稿(ChromeまたはIE)には表示されません)

Firefoxを使用している場合、私が持っているajax postリクエストは、firebugで中止されたと報告されています。 ajaxの投稿はIEとChromeで正常に機能します。これはクロスドメインリクエストではありません。フィドラーを使用して問題を調べてみました。フィドラーがWebトラフィックをキャプチャしているとき(httpsを復号化するように設定されたオプションを使用) )投稿は機能します。Firefoxはすべてajax経由で送信するデータを正常に投稿しようとするため、ローカル開発環境で投稿の問題を作成できません。フィドラーの実行中に投稿が機能する理由は何かわかりますか?それを機能させる方法。

$.ajax({
            type: 'POST',
            url: '/Save',
            data: JSON.stringify(dataset),
            datatype: "html",
            contentType: "application/json",
            success: function (data, textStatus, jqXHR) {
                //alert("success");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                //alert("error");
            }
        });

また、このajaxリクエストは多くのメソッドによって呼び出され、最大のデータセットが送信された場合にのみ失敗します。

19
FiveTools

試してみてください

async: false

ajaxオプションでも、同じ問題が発生しました。

9
Marys

まず、いくつかの基本的なajaxオプションを明示的に設定(および変更)します。

 cache: false,
 timeout: 60000,
 async: false
3
shaun5

このAJAXイベントハンドラーからのリクエスト(例:送信ボタンのクリック)を送信する場合は、HTTPが2つになるまで、ブラウザーのデフォルトの動作(フォームの送信)を必ず防止してください。リクエストが実行され、最初のリクエストは中止されました。

これを実現するには、e.preventDefault()を使用できます。

私はIE8でこの問題を抱えていました。

2
Vince

サーバーが返すコンテンツの種類。 JSONまたはHTMLコンテンツ。サーバーコンテンツでcharset = utf-8を使用していますか。サーバーの応答がJSONcontentTypeである必要があることを確認してください。別の推測では、コードからdatatype: "html"を削除します。運試しをしてください。

サーバーがjsonの意味を返す場合は、以下を試してください

$.ajax({
            type: 'POST',
            url: '/Save',
            data: JSON.stringify(dataset),
            datatype: "json",
            contentType: "application/json",
            success: function (data, textStatus, jqXHR) {
                //alert("success");
            },
            error: function (jqXHR, textStatus, errorThrown) {
                //alert("error");
            }
        });

データ型: "json"、contentType: "application/json"意味があります

2
Gowri

サーバーの最大投稿サイズ設定を確認してください。

1
Brad Thomas

私も同様の問題を抱えており、上記のアイデアのいくつかを試しました。私はついに「中止された」状態を次のように修正しました:

  1. ボタンイベントハンドラーにe.preventDefault();return false;を追加する
  2. datatype: "json", contentType: "application/json",jQuery.ajaxメソッドパラメータに追加します。

手がかりをみんなに感謝します。

0
dunpeal69

CORSリクエストで双方向SSL認証を使用している場合、FirefoxはデフォルトでjQueryajaxリクエストを中止します。これは、FirefoxとChromeでのCORSの実装が異なるためです。 XHRインスタンスにwithCredentials: trueを追加することで、クライアントコードでこの問題を解決できます。 jQueryでは、これをajax呼び出しに追加できます。

xhrFields: {
  withCredentials: true
}

詳細については、次のバグレポートを確認してください。

また、FirefoxがOPTIONSプリフライトリクエストで資格情報を送信することを絶対に拒否していることにも気づきました。そのため、資格情報を必要としないようにサーバーを構成する必要があります(双方向SSLシナリオではクレイジーに思えます)。

0
heez

これはクロスドメインの問題であるか、リクエストが非同期であるためにFirefoxがリクエストを中止する問題です。クロスドメインの場合は、リクエストの発信元とWebサービスで許可されているものを確認できます。 CORSを読む必要があるかもしれません。

クロスドメインでない場合は、リクエストが非同期であることに問題があります。同期するように変更するだけです。

0
Tayyab Ali