7

私が知っていること:
サーバーにajax呼び出しを行うと、ハンドラーが作成され、リクエストが送信され、phpスクリプトがリクエストを受信して​​処理し、(指示した場合は)応答を送り返します。 javascriptは必要に応じて解析します。また、ユーザーがブラウザーを閉じたりページを変更したりしても、phpがリクエストを処理し続けることも知っています(すべてサーバー側で行われるので、なぜそうしないのですか?^。^)。

知っておくべきこと:
ユーザーが私のサイト内のページを変更すると、ajaxハンドラーは強制終了されますか?例:ユーザーはmysite.com/foo.phpにいます。彼らは私のサーバーにajaxリクエストを送信するリンクをクリックします。その要求の応答は、foo.phpのdiv#respに表示されます。次に、応答を受信する前にmysite.com/bar.phpに移動します。

同じjavascript関数をロードし、bar.phpに必要なdiv#resp要素がある場合でも、ajaxを呼び出したjavascript関数はサーバーから応答を受信し、それをbar.phpのdiv#respに渡すことができます。応答?または、元のajaxハンドルは使用できなくなりましたか?また、標準のjavascriptで使用できなくなった場合応答を取得してbar.phpに表示できるようにするjQueryへの埋め込みはありますか?

4

9 に答える 9

7

あなたが説明していることから、いいえ-別のページに移動してページをリロードすると、すべてのJavaScriptハンドラーが再インスタンス化され、元のハンドラーが破棄されます。

于 2012-10-06T02:03:05.693 に答える
5

答えはいいえだ。ページを変更すると、javascriptプロセスが強制終了され、再起動されます。ページのリロードの間に何も残りません。

ただし、ページもajaxで変更された場合、プロセスは強制終了されず、応答を受け取ることができます。PushState(ところで、これは最近のブラウザで最終ユーザーにほとんどシームレスにすることができます)

于 2012-10-06T02:01:59.453 に答える
2

いいえ、ユーザーが次のページに移動する前にXHR(AJAX)応答が返される保証はありません。

ユーザーがページを離れたときにサーバー側で検出できるようにする場合は、WebSocketまたは同様のテクノロジーを使用する必要があります。WebSocket接続は、外部ホストへの長時間実行接続であり、切断されたときにサーバー側を簡単に検出できます。https://github.com/sockjsは、WebSocketクライアント+サーバーの例です。

ユーザーがページから移動する前に何かを表示したいだけの場合は、window.onbeforeunloadを確認する必要があります。onbeforeunloadは、ユーザーがページを離れる前に起動しますが、非同期AJAXリクエストを実行することはできません。詳細については、https: //developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunloadを参照してください。

于 2013-09-23T05:28:04.633 に答える
1

これを実行する場合は、「シングルページWebアプリ」を作成します。わかりやすくシンプルで、新しいURLを見つけないでください。

代わりに、pushstate / popstateを使用してブラウザーのアドレスを変更してから、javascript /dynamichtmlを使用してページを再描画します。

その後、すべてのajax応答を処理できます。

于 2013-09-24T02:06:20.423 に答える
1

もう1つのオプションは、サーバーにajaxリクエストを起動し、何かを行う必要があるかどうかを尋ねるonloadイベントを設定することです。サーバーは「もの」を追跡し、ブラウザに何が起きているかを知らせる必要があります。

基本的に、ブラウザは各ページの開始時にサーバーをポーリングします。

コード例はアプリケーションごとに異なるため、必要または適用できるとは思いません。

于 2013-09-24T02:12:39.690 に答える
0

値を受け取ったときにlocalStorageに保存することも、すべてのajaxデータ応答をセッション、memcache、またはredisに保存することもできます。つまり、サーバーがリクエストを受信した場合、サーバーは最初にレスポンスをどこかに保存してから返します。リストからメッセージ/応答を削除することはあなたの状況に依存します。一部のシステムでは通知を閉じることができ、他のシステムではユーザーが最初に通知を表示した後に通知が消えます。消えたものは揮発性です。ユーザーは実際にそれを見るかもしれないし、見ないかもしれません。

さまざまなライブラリからの「フラッシュメッセージ」のように聞こえます。これらのシステムの実装を確認することをお勧めします。

于 2013-09-18T17:33:22.823 に答える
0

元の受け入れられた応答は正しいですが(別のページに移動するとajaxリクエストへの応答を受信できません)、回避策があります。Webサイトをシングルページアプリにすると、応答を取得できるようになります。

于 2013-09-23T00:16:01.467 に答える
0

私のプロジェクトの1つでも同じ状況がありました。ページ間で一時的なものを作成するには、あるページから別のページに認識できるものを用意する必要があります。使用するのが最も簡単なのはPHPセッションです(PHPを使用しているのを見ました)。非常に簡単ですが、アクティビティが開始されているかどうかをサーバーで(PHPSESSIDを使用して)チェックする非同期リクエスト(Ajax)を各ページにロードすることができます。各ページの読み込み(docready)を確認するか、間隔を空けて確認するかを選択できます。

もちろん、ユーザーがブラウザのタブを閉じると、すべてが失われます。

于 2013-09-23T15:50:30.663 に答える
0

ページを離れるとすぐに、単純なHTTP POSTで使用されている場合、すべてのAJAX呼び出しをページで使用できなくなります。

HTTPリクエストのライフサイクルは、通常、次のようになります。

ユーザーがWebサイトのURLにアクセスします。これにより、HTTP(ハイパーテキスト転送プロトコル)を介してインターネット(DNS、ルーター、およびスイッチのネットワーク)を介してWebサーバーにルーティングされる要求が作成されます。WebサーバーはHTTP要求を受信し、要求されたWebページ(またはコンテンツ)でユーザーに応答します。リンクをクリックしてWebページにアクセスするたびに、バックグラウンドで要求を行い、Webサーバーから応答を受信します。HTTPリクエストは、Webブラウザだけでなく、多くのチャネルを介して行うことができることに注意してください。たとえば、HTTP要求は、TELNET、またはJAVAやC#などで記述されたクライアントを使用して行うことができます。

したがって、httpのライフサイクルを微調整できるように、このためにソケットを使用する必要があります。

http://devhub.fm/http-requestresponse-basics/

于 2013-09-24T09:02:58.337 に答える