• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JavaScriptとサーバーでのやり取り)

JavaScriptとサーバーでのやり取り

このQ&Aのポイント
  • サーバー側で常にアップデートされているデータにAJAXを使ってアクセスし、そのデータに基づいてブラウザ画面に直線を引くルーチンを作成しています。
  • サーバー側ではデジタル回路の任意の8ポイントからのデータを1バイトにまとめてファイルを作り、数ミリ秒ごとに新しいデータに書き換えています。
  • ブラウザ側では、サーバーで常に更新されているデータファイルに記録されているデータをAJAXで取得し、添付した写真(1)のように、横に10分割、縦に8分割してあるキャンバスの各コマにそのデジタル信号を時系列的に左から右へ流れるように表示できるようにしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

時間稼ぎを for 文のループではなく setTimeout に変えたらどうでしょう。 for文で回っている間は他の処理の割り込みが発生せず、ひたすらfor文の処理が動いてしまい時間稼ぎになっていない場合があります。 alertで上手く行くのは、ブラウザにalertが表示されて「OK」が押されるのを待っている間は、その部分の処理が止まり、他の処理が割り込める状態となっているためAjax側の処理が実行されていきます。 setTimeoutを使えば、指定した時間の間メインの処理が止まって、待ちになっていた他の処理が実行されるので、alertが表示されユーザーが「OK」を押すのを待っているのと同じような状態にすることができます。

papashiroSooke
質問者

お礼

早速ご回答いただき、有難うございます。 外側の for ループを外して、内側全体を関数にしてこのルーチンの外側に置き、外側のfor ループがあった場所に setTimeout( ) をおいて、一定期間ごとにこの関数を呼ぶ形にしてやってみます。

その他の回答 (2)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.3

forで回すのはおかしいですね

papashiroSooke
質問者

お礼

早速のご回答、有難うございます。 for ループを使わない方法を今試しています。

noname#177743
noname#177743
回答No.2

直接の回答になっていなくて恐縮なのですが……。 どうも、見たところ、サーバーと常時接続を維持して表示を更新させていくようなことを考えているように思えるのですが……。Ajaxは、非同期にサーバーにアクセスして結果を受け取る、それだけのものです。常時接続を維持してデータを受信し続けるようなものではありません。そこに設計上の問題がありはしないでしょうか。 そうした処理は、Server-Sent Eventなどのほうが向いているように思えました。本格的に常時接続による双方向通信を行うのであればWeb Socketという技術がありますが、専用のサーバーが必要などちょっと敷居が高いです。このあたり調べてみてはいかがでしょう。 参考ページ http://libro.tuyano.com/index3?id=872003

papashiroSooke
質問者

お礼

早速回答いただき、有難うございます。 これは学校のプロジェクトでやっているもので、本格的なシステムを作ろうとしているわけではありません。Ajaxが非同期なのは知ってますが、ほかのルーチンでも同じような形で常時アクセスして正弦波を再生したり、FFTを使って周波数スペクトルを表示できたりしています。サーバー側のデータさえ用意できていればいつでも(時々でも常時でも)アクセスできると思ってやっています。

関連するQ&A