2011-09-21 15 views
6

Ajax呼び出しを行うためにPrototype JSフレームワークを使用しています。ここに私のコードは次のとおりです。ブラウザでAjax呼び出しがキャンセルされる

new Ajax.Request('/myurl.php', {method: 'post', postBody: 'id='+id+'&v='+foo, onSuccess: success, onFailure: failed}); 

function success(ret) { 
console.log("success",ret.readyState, ret.status); 
} 
function failed(ret) { 
console.log("failed",ret.readyState, ret.status); 
} 

これが正常に動作し、成功関数が成功関数はステータスコードで呼ばれているのSafari上の時間の200約5%の状態コードと呼ばれ、ほとんどの時間この場合、Webインスペクタの[ネットワーク]タブを見ると、ajaxコールのステータスが「キャンセル済み」になります。私はサーバログで、リクエストがサーバに届かないことを確認できます。あたかもajaxリクエストがサーバーに接続しようとしてもすぐに取り消されたかのようです。私はこれを再現するための信頼できる方法を見つけていない、それはランダムであるようだ。私は20回それを行い、それは一度起こります。

誰かがajax呼び出しをキャンセルしたり、ステータスコード0を返す原因を知っていますか?

+0

使用しているプロトタイプのバージョンはどれですか? – jonycheung

答えて

1

原因がの場合、は、使用しているhttpサーバーとブラウザの組み合わせである可能性があります。 PrototypeJSライブラリのエラーのようには思えません。

複数の情報源によると、SafariではHTTP接続のキープアライブパラメータが壊れているようです(here,hereまたはhereを参照)。 Apacheでは、これを設定に追加することをお勧めします。

BrowserMatch "Safari" nokeepalive 

(サーバーのマニュアルで適切な構文を確認してください)。

SafariがサーバとのHTTP永続接続をひどく処理すると、あなたの体験が説明されることがあります。

複雑すぎることがなければ、別のHTTPサーバーを試してみると、すべてのOSで十分なものがあります。

あなたの回答には完全に回答するための情報がありません。サーバーの問題はリードですが、他にも存在する可能性があります。他のブラウザでも同じことをしているかどうかを知ることは良いことです(FirefoxはFirebugでこの種の情報を表示しますが、Chrome、Opera、IEには開発ツールが組み込まれています)。もう1つの有効な質問は、このAJAXリクエストを1秒あたりに実行する頻度です(該当する場合)。

0

これは古いトピックですが、私は他の人に時間を節約する可能性のあるSafariのソリューションを共有したいと考えていました。正規表現は、必ずMacのSafariのみが検出されます

BrowserMatch "^(?=.*Safari)(?=.*Macintosh)(?!.*Chrom).*" nokeepalive gzip-only-text/html 

はなく、モバイルのSafariとChrome(ニウム)と、このような:次の行は本当にすべての問題を解決しました。 Safari for Windowsもマッチしていませんが、キープアライブの問題はMac-Safariの組み合わせのみたいです。さらに、Safariの一部のバージョンでは、gzipで圧縮されたCSS/jsをうまく扱えません。

Safariのさまざまなバージョンでは、私たちのサイトのクラッシュやCSSが完全にロードされていないため、私の頭を引っ張ってしまいました(Safariは本当に新しいIEです) 。

関連する問題