POSソフトウェアは注文をテキストファイルに上書きします。私は注文を表示するキッチンディスプレイを作ろうとしています。 私のPHPスクリプトはそのテキストファイルから読み込みます... sleep(1);
を使って1秒ごとに比較を行い、新しい注文が到着したかどうかを確認します。AJAXを介してPHPで条件が満たされるたびにエコーされる
<?php
$f1 = fopen("G:/order.txt", 'r');
$firstLine1 = fgets($f1);
fclose($f1);
sleep(1);
$f2 = fopen("G:/order.txt", 'r');
$firstLine2 = fgets($f2);
fclose($f2);
if($firstLine1 != $firstLine2) {
$fh = fopen("G:/order.txt", "r");
echo "<div>";
while ($line = fgets($fh)) {
echo ($line);
}
fclose($fh);
echo "</div>";
}
?>
Ajaxを使用して、このスクリプトを1秒ごとに実行します。
<script>
function loadDoc(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
$("p").before(this.responseText);
}
};
xhttp.open("GET", "order.php", true);
xhttp.send();
}
window.setInterval(function(){
loadDoc()
}, 1);
</script>
の問題は、約50のdivが、それは注文ごとちょうど1
1事業部である必要があり、すべての新しい順のために作成されているということです。
困ったことを助けてください。
_textファイルの注文_... POSは「Point of Sale」または「Piece of S ***」を表しますか?なぜデータベースはありませんか?とにかく、あなたのPHPスクリプトは各実行中にファイルから_once_を読み込み、以前の実行中に見つからなかった注文を返す必要があります(そのために、おそらくajaxクライアントは受け取った最後の注文のIDを伝える必要があります。あなたはSESSION変数を使うことができます)。そして、毎ミリ秒ごとにajaxコールを実行することは狂っています。前の呼び出しが完了する前に戻ることができないということは、サーバーの負荷が高くなり、並行処理の問題が発生することです。 – ADyson
代わりに前回の呼び出しが完了するまで待ってから、setIntervalを使用せずにreadystatechangeコールバックから再度loadDoc()を呼び出してください。または、それを変更してより長い間隔(10秒、30秒?それは時間的に重要なこのデータが本当にあるかどうかに依存します) – ADyson
私はプログラミングに新しいです、あなたはコードを書き換えてください。私はあなたに素晴らしいことができます! –