3

ユーザーがコメントを送信すると、データベースに既に保存されているかのように画面に表示されるコメントシステムをセットアップしようとしています。私の質問は次のとおりです。ユーザーがコメントを送信してから別の場所に移動した場合 (または、最も具体的にはウィンドウをすぐに閉じた場合)、または ajax の投稿後に接続が失われた場合はどうなりますか?

コード側ではajax({})...

次に、テキストエリアからユーザー入力を受け取り、それを div に追加するコードがあります。

これは、ユーザーが入力したコメントを即座に見ることができることを意味します。しかし、接続が失われたり、ウィンドウが閉じられたり、ユーザーが移動したりした場合でも、サーバーが投稿情報を取得できるかどうかを確認したいと思います。


質問の詳細:

ユーザーが 1 MB の値をサーバーに投稿し、1 ミリ秒後に投稿を行ったボタンをクリックすると、ブラウザー ウィンドウが閉じられました。

ignore_user_abort(true); サーバーはファイル内で応答を受信して​​解析しますか? 投稿情報は受信されましたか?

この場合、post ではなく get の場合に違いはありますか?

推定website.com?myget=value

接続しようとしてすぐにウィンドウを閉じます。たとえば、ブラウザ ウィンドウで、アドレス バーにそれを押してすぐに閉じます。それが自動的に行われると想像してください。

ステップ1に進みwebsite.com?myget=valueます(サーバーの応答をまったく待たずに、すぐに(ミリ秒またはスクリプトがそうするのにかかる時間は何でも)ウィンドウを完全に閉じます。

$_GET['myget']website.com の index.php でサーバー側に受信されますか?

4

3 に答える 3

1

これは UX の問題であり、技術的な問題ではありません。あなたがしたいことは、保存された後にのみ新しいコメントを表示することです。ワークフローは次のようになります。

  1. ユーザー タイプ メッセージ
  2. ユーザーが「送信」ボタンをクリックする
  3. システムは「送信」ボタンをグレーアウトし、「投稿中...」というメッセージを表示します。
  4. メッセージが正常に保存されたことをシステムが確認できると、システムは「投稿中...」テキストを削除し、実際の新しいメッセージを表示します。

これにより、ユーザーは、リクエストが完了するまでブラウザーを閉じたり、別の場所に移動したりしないことを認識できます。


onbeforeunloadあるいは、ブラウザを閉じたり別の場所に移動したりする前に待機するようにユーザーに警告することもできます。ワークフローは次のようなものです:

前提条件:どこかに永続的なカウンターがある (Cookie、ローカル ストレージ、非表示フィールドなど)。ページが読み込まれると、 0から始まります。

  1. ユーザー タイプ メッセージ
  2. ユーザーが「送信」ボタンをクリックする
  3. AJAX リクエストが送信されます
  4. カウンターが1増える
  5. リクエストが完了し、レスポンスが返されたら (成功したかどうかにかかわらず、エラー処理は別の問題です)、カウンターを1減らします。

いずれかの時点でunloadイベントがトリガーされると、システムはカウンターをチェックします。0より大きい場合、リクエストが完了しておらず、コメントが失われる可能性があることをユーザーに警告します (a-la-Gmail)。

于 2012-12-24T16:43:51.293 に答える
0

ほとんどの場合、サーバーに対して実行するアクションは、サーバー上で実行されている PHP が結果をブラウザーに出力しようとするまで実行され続けます。この時点でのみ、PHP は接続がまだ存在するかどうかを確認し、ユーザーの中止設定に基づいて必要なことを行います。したがって、たとえば、投稿を受け取り、データベース エントリを更新し、何らかの成功メッセージをエコー バックする場合、データベースがクエリされる前に出力を行わない限り、データベース アクティビティは継続する必要があります。

POST と GET では、この動作に違いはありません。

于 2012-12-24T16:36:25.497 に答える