2012-04-06 13 views
1

私は過去2日間Google検索を行っていて、私が欲しいものを見つけることができませんでした。PHPでローディングバー

クライアントがバルクSMSを送信できるようにPHPで開発されたSMSmobileツールがあります。クライアントがSendボタンを押すと、SMSがすべての連絡先に送信されるまでブラウザがロードされ続けます(100000件以上の連絡先)ので、2〜5分かかります。つまり、クライアントがブラウザRefreshボタンまたは同じページの他のボタンを押すと、送信プロセスが破棄されます。

Sendingプロセスが終了するまでユーザーが何もしないようにするポップアッププログレスバーを表示する必要があります。

お願いします。

+1

より良いオプションになりますが、いくつかを表示することができますあなたは現在それをやっている方法のコード? 1つの提案は、実際のSMSがインプロセス・アクティビティを送信しないようにすることです。データベース内のメッセージをキューに入れ、バックエンドプロセスに送信させます。こうすることで、ユーザーは引き続きサイトとやりとりできます。次に、サイトには、各ページにある種の進捗インジケータがある可能性があります。これは、処理に長時間(1分以上)かかる場合は特に有効です。 – David

+0

AJAXとWebソケットを使用して進捗状況を報告することをお勧めします。また、人がページを更新するだけで、必ずしも要求を実行しているサーバー側のPHPプロセスを強制終了する必要はありません。 – crush

答えて

0

これを試してみてください:

function checkRefresh() 
{ 
if(document.refreshForm.visited.value == "") 
{ 

    document.refreshForm.visited.value = "1"; 


} 
else 
{ 
document.write (' 
$(function2() { 
    // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore! 
    $("#dialog:ui-dialog").dialog("destroy"); 

    $("#dialog-modal").dialog({ 
     height: 140, 
     modal: true 
    }); 
}); 
$(function() { 
    $("#progressbar").progressbar({ 
     value: 59 
    }); 
}); 
') 
} 
} 

をあなたはjQueryのを持っていることを確認してください!

マークアップ:

<div class="demo"> 
<div id="dialog-modal" title="Basic modal dialog"> 
<div id="progressbar"></div> 
</div> 
</div> 

が続いてこれであなたの体のタグを置き換える:

<body onLoad="JavaScript:checkRefresh();"> 

そして、あなたのHTMLにこれを追加:とにかく

<form name="refreshForm"> 
<input type="hidden" name="visited" value="" /> 
</form> 

、これはリロードして実行を検出し、ローディングバーは、うまくリロードできないようにします(うまくいけば)

2

ファイルロックでさえ、ある種のロックを使用します。次に、ajaxを使ってX秒ごとにポーリングし、ジョブが終了したかどうかを確認します。

function send() { 
    if (file_exists('/tmp/' . $session_key . '.lck')) return; 
    touch ('/tmp/' . $session_key . '.lck'); 
    # do the actual job 
    # ... 
    unlink('/tmp/' . $session_key . '.lck'); 
} 
0

これがページに表示されるように設定されている場合は、modal dialoganimated progress barを組み合わせることをおすすめします。

プログレスバーで計算する必要はなく、100%に設定するだけでスクロールしているように見えます。「メッセージは処理中です。」というテキストを追加します。

1

私の解決策は、一種のキューリスト(SQLテーブル)を読んでそこに立っている新しい実行エントリを進めるバックグラウンド実行スクリプト(cronジョブ)です。

何かを後で呼び出す小さなクライアント側スクリプトは、行を数えてフロントエンドに返します。

0

あなたの問題だけではなくloading barlot of things are wrong with your application architecture

質問ありますか?Even if the person does not click refresh and there is a connection issue what happens

クイックソリューション

cron JOB

よりよい解決策

使用後に送信 Database

SMS information

ストアを取ります

使用Messaging Queue

あなたは、ユーザーの携帯電話にロードバーを表示する必要はありません.... Message Sent

おかげ

:)

関連する問題