1

結果を待つブラウザウィンドウを離れないフォーム送信時に機能を開始する方法を探しています。

例: ユーザーがフォームに入力して送信を押すと、javascript を介してフォームからのデータがデータベースに送られ、数秒かかる PHP の関数が開始されますが、ユーザーがその関数の終了を待たされることは望ましくありません。 . 私は彼を別のページに連れて行き、その機能をサーバー側に任せたいと思っています。

何かご意見は?

ありがとう


すべての返信をありがとう...

私はajax部分を手に入れました。しかし、私は ajax を呼び出すことができず、ブラウザーを別のページに移動させることができません。

これが私が欲しかったものです。

-ユーザーがフォームに入力して送信する -データベースに渡されたフォームからの結果 -長い煩わしいプロセス機能の開始 -ユーザーは、「長い煩わしいプロセス機能」のステータスとは関係なく、サイトの残りの部分にアクセスし続けます

ところで、誰かがそれを提案する前に。いいえ、cron ジョブでは実行できません

4

5 に答える 5

3

AJAX を使用して php スクリプトを呼び出し、スクリプトの先頭でignore_user_abortをオンにします。

ignore_user_abort(true);

そうすれば、ユーザーがページから離れた場合でも、スクリプトはバックラウンドで引き続き実行されます。使用することもできます

set_time_limit(0);

時間制限を設定するには、スクリプトが完了するまでに時間がかかることがわかっている場合に便利です。

于 2009-05-22T18:12:28.387 に答える
1

ああ、わかりました、あなたは基本的に尋ねているので、PHPはスレッド化をサポートしていますか、そして一般的な答えはノーです...しかし...

この動作を模倣するために実行できるいくつかのトリックがあります。そのうちの 1 つが上で強調表示されており、サーバー上の別のプロセスに分岐する必要があります。これは、次を含むさまざまな方法で達成できます。

exec()

方法。こちらもご覧ください。

PHP スレッド

また、スクリプトの途中で出力バッファを強制的にフラッシュして、応答をクライアントに強制的に戻そうとする人も見てきました。このアプローチがどれほど成功するかはわかりませんが、他の誰かがその情報を持っているかもしれません。

于 2009-05-22T17:57:43.717 に答える
1

最も一般的な方法は次のとおりです。

exec("$COMMAND > /dev/null 2>&1 &");
于 2009-05-22T17:43:23.710 に答える
0

これはまさに AJAX (非同期 JavaScript + XML の省略形) の目的です。

AJAX 情報

クライアント側のコードを使用してコーディングし、非同期リクエストをサーバーに送信して、ユーザーのブラウザがページリクエスト全体によって中断されないようにすることができます。

Web 上には AJAX に関する情報がたくさんあります。深呼吸してググってみてください。

于 2009-05-22T17:44:07.403 に答える
0

AJAX (Asynchronous Javascript and XML - google) が提供する機能の一部を使用したいようです。

基本的に、コンテンツを含むページがあります。ユーザーがボタンをクリックすると、javascript を使用してデータがサーバーに POST され、処理が開始されます。同時に、その JavaScript はサーバーからページを読み込んで表示する場合があります (たとえば、データを読み込んでから、DIV の内容をその新しいページに置き換えます)。

こののことは AJAX の背後にある前提であり、複数のことを同時に実行する Web ページがある場合、どこにでも見られます。

注意: これは、スクリプトが「サーバーのバックグラウンドで」実行されているという意味ではありません。Web ブラウザはまだ Web サーバーとの接続を維持しています。これは、コードがクライアント側の「バックグラウンド」で実行されていることを意味します。「バックグラウンド」とは、実際には「HTTP リクエストを他の HTTP リクエストと並行して処理して、「バックグラウンド」で実行中のプロセスの感覚を与える」ことを意味します。

于 2009-05-22T17:45:46.153 に答える