0

応答が利用可能になる前にスクリプト全体を実行する必要があるため、PHP を使用して AJAX を使用して DOM にメッセージを送信することはできないことを理解しています。そのため、次の 2 つのオプションがあるようです。

  1. 長いプロセスをいくつかの小さなプロセスに分割し、それぞれの後にレポートを返す
  2. ステータスの更新をファイルに書き込み、プロセスの実行時にシステムにファイルを読み取らせます。

どちらの方法にも大きな利点または欠点はありますか?

4

1 に答える 1

1

あなたが質問している方法はわかりませんが、(jQueryとPHPを使用して)できることは次のとおりです。

javascript では、window.setTimeout() を使用して、ajax コールバックを使用して URL をチェックする関数を呼び出します。

URL は、新しいメッセージが存在するかどうかを確認する php スクリプト用です。

PHP スクリプトは、フラット タイルまたはデータベースのいずれかで新しいメッセージをチェックしますが、何を使用するかは不明です。

次に、スクリプトはメッセージを直接の html マークアップ、単純なテキスト、または JSON または XML 形式で出力します。

成功すると、ajax 呼び出しがページ上の何らかのセレクターに応答を出力し、window.setTimeout() を再度呼び出します。

これは html マークアップの一部です。

<div id="systemmessage">here goes new message</div>

これはjavascriptの一部です:

$(document).ready(function(){

window.setTimeout('checkForMessages()',5000); //sets for 5 seconds.
});

function checkForMessages(){
$.ajax(function(){
 url: "checkformessages.php",
 success: function(data){
  if(data!=''){
    $('#systemmessage').html(data); //place response in systemmessage
  } 
  window.setTimeout('checkForMessages()',5000); //we set timeout again
 }
});

}

これは、「checkformessages.php」と呼ばれる php スクリプトの一部です。

$message = file_get_contents('messages.txt'); //check from file where you output new message 
//or
$message='';

//use db table, with fields id (int autoincrement, primary), message(text), user_id (integer), created(integer, strtotime - timestamp) 

$sql = 'SELECT * FROM system_messages WHERE user_id=somenumber AND created>(current time - 5 seconds)'; //this is more pseudo code, than correct syntax

$result = mysql_query($sql);
if(mysql_num_rows($result)>0){
 while($row = mysql_fetch_object($result)){
  $message.= $row->message.' <br/>';
}
}      

    if($message  && $message!=''){
    echo $messages; 
    }
于 2013-07-23T11:48:04.147 に答える