0

顧客のサーバーで奇妙な問題が発生しました。
以下に投稿されたようなコードをいくつかのスクリプトで使用しています。$.ajax の構成はほとんど同じ (つまり、ファイル、データ、および成功関数の変更のみ) であり、常に type:POST を使用します。
これはほとんどの場合うまくいきますが、以下の場合、POST は常に失敗します。タイプを GET に変更すると問題なく動作します。

ここで何が起こっているのか、私には少しわかりません。

var parameter = {
    password : $("#password").val()
};

$.ajax({
    type     : "POST",
    url      : "query/submit_password.php",
    dataType : "xml",
    async    : true,
    data     : parameter,
    success  : function(aXHR) { /* ... */ },
    error    : function(aXHR, aStatus, aError) { alert("Error:\n" + aStatus + "\n"+ aError); }
});

このコードは常に「NetworkError: ネットワーク エラーが発生しました。」というアラートを返します。
繰り返しますが、ほとんど同じコードの他のケースは問題なく動作します。
Chrome および Firefox 開発ツールは、それ以上の説明なしに POST エラーを報告します。

ここで何が起こるか分かりますか?


さらにいくつかの詳細。

  • クライアントのサイトは GoDaddy でホストされています
  • 同じピースコードは他のサーバーでもうまく機能します
  • はい、GETリクエストが機能するため、ファイルは存在します
  • これを試したすべてのブラウザには、ブロッカープラグイン(adblockなど)がインストールされていません

HTTPScoop は次の結果を示します
(3 回の試行、赤いステータスは「通信パートナーによって接続が閉じられました」と表示されます)。

HTTPScoop の結果

Chrome では次のように表示されます。

クロムエラー


ほぼ解決。
Apache ログは、リクエストのステータス 403 を示していました。
また、返されたサイズが 0 であることも示されました。これは、クロムなどが失敗した要求を示した理由である可能性があります。
なぜこれが起こるのかはまだ明らかではありませんが、サーバー側の構成の問題であることは間違いありません (ほとんどの場合、mod_rewrite の問題またはそのようなものです)。

4

1 に答える 1

1

contentType: "application/json; charset=utf-8" を ajax 呼び出しに追加してみてください

$.ajax({
    type     : "POST",
    url      : "query/submit_password.php",
    contentType: "application/json; charset=utf-8",
    dataType : "xml",
    async    : true,
    data     : parameter,
    success  : function(aXHR) { /* ... */ },
    error    : function(aXHR, aStatus, aError) { alert("Error:\n" + aStatus + "\n"+ aError); }
});

benhowdle89 の言うことを試しても解決しない場合は、stringify(parameter) を使用してください。

于 2013-10-27T07:36:04.780 に答える