2

AJAXリクエストを作成すると、Chromeの[ネットワーク]タブに表示されます。同時にクライアントベースのリダイレクトを行うと、AJAXリクエストはキャンセルされます。しかし、リクエストはサーバーに到達し、通常どおり実行されますか?クライアントがリクエストをキャンセルしたことを知っているのはHTTP/TCPの何かですか?そうは思いませんが、確かにしたいと思います。

4

2 に答える 2

1

async: falseこれは、 ($.ajax(...)オプションの)同期要求が適切な数少ないケースの1つです。これにより、通常、リクエストが完了するまでブラウザが他のページに移動するのを回避できます。

于 2012-12-03T16:46:06.427 に答える
1

PHPサーバー側を実行している場合、クライアント側でアボートが発生すると処理停止します。(私が読んだところによると、これは他のサーバー側テクノロジーには当てはまりません。他のサーバー側テクノロジーは、クライアントが異常終了した後も処理を続行します。)参照:

http://php.net/manual/en/features.connection-handling.php

しかし、何らかの形で何かを想定しないのが最善です。ブラウザリクエストをキャンセルする場合があります。また、このキャンセル、サーバー側の処理を停止するのに間に合うように発生する可能性があります。しかし、必ずしもそうとは限りません。クライアントは、要求が実際に送信される直前から応答本文が送信された直後まで、要求中の任意の段階でキャンセルできます。また、サーバー側の要求処理を中断する可能性のあるものが他にもあることを覚えておいてください(ハードウェア、電源、OS障害など)。いくつかの予測不可能性を期待してください。

これから、私は2つの推奨事項を作成します。

  • 可能な限りトランザクションセーフなコードを記述してください。リクエストによってデータが変更された場合は、すべての変更がデータベースにパイプされるまでコミットしないでください。また、アプリケーションが複数のAJAXリクエストに依存して一部のデータを変更する場合は、「最終的な」AJAXリクエストが終了するまで変更をコミットしないでください。

  • 要求が終了した場合でも、クライアントが応答を受信すると想定しないでください。つまり、アプリケーションがAJAXを多用する場合は、サーバー側の状態に依存してクライアントが何かを「認識」していると見なすのではなく、常にクライアント側の状態に依存してサーバーに情報を通知します。

于 2012-12-03T17:00:55.390 に答える