2017-01-25 18 views
0

私はボタン付きのWebページを持っています。ユーザーがボタンをタップすると、実行する長いPHPスクリプト(ユーザーが購入した過去のトークンを見てみましょう)があり、スクリプトの終わり。phpスクリプトを非同期で実行する

私は共有目的のために私のコードを抽象化しました(スクリプトをただのスリープ機能で置き換える)。

webpage.php

<div class="card"> 
    <input type="submit" class="button" name="update" value="Update" /> 
</div> 
<script type = "text/javascript" src="jquery_functions.js"></script> 

jquery_functions.js

$(document).ready(function(){ 

    $('input[name="update"]').click(function() { 
     $.post(
       "script.php", 
       {update:"fav_tokens"}, 
       function($data) { 
        alert ($data.message); 
       }, 
       "json" 
      ); 
    }); 

}); 

script.php

<?php 
    sleep(60); 
?> 

問題ですユーザーがボタンを押すと、彼はページに「ロックイン」され、そこからナビゲートすることはできません。これは、jQuery AJAXのことを行う目的を打ち消すものです。

私は別のファイル(script2.php)でスクリプトを入れてみましたし、その後script.phpにexec("php -f script2.php");を使用してそれを呼び出すが、それはまた、ページから離れて移動するからユーザーを停止しています。

この作業を行うにはどうすればよいですか?

+0

ボタンなどの入力タイプを作るか、またはフォームはformタグとJSの機能を使用して、デフォルトを防ぐ作ります。あなたの入力タイプボタンをタイプサブミットから作成するだけです。 – webDev

+0

「彼はページに「ロックされていて、そこから遠ざけることはできません」と説明できますか? PHPサーバが他のリクエストに対して応答しなくなることを意味しますか? –

+0

コンポーザから[Symphone event dispacher](http://symfony.com/doc/current/components/event_dispatcher.html)パッケージを使用することができます。タスクがバックグラウンドで実行され、すぐに「私たちはあなたのリクエストを処理しています」というような素敵なメッセージを返します。 – AfikDeri

答えて

0

script.phpがセッションを開いていて、あなたが訪問しようとしているページもセッションを開こうとしていますが、script.phpがすべて設定されるまで待つ必要があります。

どこかscript.phpであなたが追加する必要があります。

ignore_user_abort(1); // Let the script run even if user leaves the page 
set_time_limit(0); // Let script run forever 

session_write_close(); // Close the session. This will allow for other pages to open it 
         // You will still be able to read your session data but can no longer write to it unless it is re-opened 

sleep(60); 
+0

それはそれをしました!ありがとう@MonkeyZeus – pradyotghate

+0

あなたは大歓迎です!お役に立てて嬉しいです :) – MonkeyZeus

関連する問題