• ベストアンサー

javascriptで排他制御

いつもお世話になっております。 現在、AJAXを使って、10秒に一度サーバのデータを受けて表示するというものを作成しています。 その際、キープアライブという形で別の通信をしているのですが、運悪くその二つの応答が重なってしまうと、データ表示がおかしくなってしまいます。 これではまずいので、一つの通信が終わるまでもう一つの通信を始める時間になっても待っているようにする、排他制御がしたいのですが、javascriptで実現可能なのでしょうか? C++でいうとcriticalsectionのようなものがほしいですが見当たらなかったので、ご存知の方がおられましたらご教授願います。

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

  • ベストアンサー
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

AJAXの通信方法は通常のWeb(すなわちhttp等)となんら変わりありませんから 排他制御はサーバ側で行う必要があります。 というより、JavaScriptはクライアントで動きますから サーバで起きていることをクライアント(しかもブラウザ)で制御するというのは おかしな話ではないですか? HTTPステータスコードならstatusプロパティで取得することが可能なので おかしなデータが送られてくるときに何か特別なステータスコードが返っているなら 処理を変えることができるかもしれません。

その他の回答 (1)

回答No.2

> これではまずいので、一つの通信が終わるまでもう一つの通信を始める時間になっても待っているようにする、排他制御がしたいのですが、javascriptで実現可能なのでしょうか? 以前の通信の状態を確認して、通信中であればリクエストしないか、 abort()を呼び出して通信を停止すればいいのでは? 通常のブラウザは、アンカー2つをクリックすると、1つめのは停止して2つめのアンカーのページに移動しますから、 古いのはabort()して新しいリクエストだけを実行、というのがユーザーの期待に添う動作ではないかと思います。 abort()を呼び出すとreadystateが1~3から0に変化しますので、onreadystatechangeが呼び出されます。 そのときにreadyStateプロパティかstatusプロパティを確認すると、Fxなど一部のブラウザでシステムエラーが発生しますので、何か対策が必要です。 私は別途通信中を確認するためのフラグを持たせることで対応しました。 (readyState、statusと、独自の変数の3つで確認し、onreadystatechangeの処理を行っています) ActiveXObjectはabort()をサポートしていませんが、 deleteやnullの代入でオブジェクトを削除すれば、通信を停止できます。

関連するQ&A

  • 排他制御の方法

    現在、PWS+ASP+ACCESSを使用し開発を行っていますが排他制御で悩んでいます。 ASPは、ステートレスなセッションでの制御しか出来ないため、ページを表示後のデータの変更はスタンドアロンでの更新のような形になってしまうと思います。 以下のような方法で行っている実例を見たことがありますが、少なからず問題も抱えていると思います。 ・レコード毎に排他フラグを保持する ~ 処理がアベンドした場合にフラグが残る(一定時間後に解除という方法もありますが) ・レコード毎に更新時間を持ち、読込時の更新時間と更新時の更新時間とを比較し更新されていない時だけ更新をかける ~ 後に更新をかけようとした変更が無駄になる 上記の方法以外で、排他制御を実現させる良い方法はないのでしょうか。他の方法で実現しているときは、その方法を教えて頂けませんでしょうか。 ※PWS→IIS、ACCESS→SQLServerに変更する可能性はあります。 (セッションオブジェクト・アプリケーションオブジェクト等を使用しての実現方法など) 宜しくお願いします。

  • JavaScriptで開いたウィンドウの制御

    JavaScriptのopenで開いたポップアップウィンドウですが、 任意のタイミングでアクティブウィンドウにする、という動作は実現可能なのでしょうか。 やりたいことのイメージとしては、定期的にAjaxで通信を行い、 あるデータが取得できたら、ポップアップウィンドウを最前面に表示させる感じです。 新しく開く、ではなく、既に開いているポップアップウィンドウを制御します。 あるいは、WindowsXPのタスクバー上でウィンドウのボタン?が点滅する振る舞いでも構いません。 要は、ポップアップウィンドウが画面上に見えていなくても、 何かイベントが起きたことをユーザが気付ける演出なら何でもOKです。 なお、音を鳴らすのはスピーカー音量次第なのでNGです。 ブラウザはIE限定で構いません。 ActiveXは想定していません。JavaScriptで実現したいです。 どなたか分かる方いましたら、よろしくお願いします。

  • 排他制御について

    質問します。 VB.NETとSQLServer2000を使用して受発注処理を作成したいのですが、排他制御について今悩んでいます。 レコードロックの動作についてなのですが、Aさんが「A01」のデータをレコードロックでデータを画面に表示している場合に、Bさんも(別PCにて)同様にレコードロックで「A01」のデータを表示することは可能なのでしょうか?(取得できるのか) 何方かご教授お願い致します。

  • Accessの排他制御をどのように行うべきか

    いつもお世話になっております。 Windows2000 Access2002、またはAccess2000にて、 複数のPCで、サーバにおいてあるmdbファイルを使用するシステムを開発する場合、 (例えば、スタンドアロンで使用していたシステムを複数のPCで使用することになったと仮定します。 また予算の都合上、Oracle、SQL Serverなどは使えないものとし、各PCにAccessがインストールされます。 ) 排他制御を行うために、Accessで排他モードで開いて使用するという対応というのは、問題ないのでしょうか。 データが破損する可能性があるということをよく耳にするのですが、 過去に上記の対応を行われた方がいらっしゃいましたら、その後の運用で問題は発生しなかったか(ファイルが壊れる事はないのか)、 過去に壊れた事象をお持ちの方がいらっしゃいましたら、どのように対応されたのか、 別の対応方法をとられていらっしゃる方は、その対応方法を ご教授いただけないでしょうか。 プログラムでデータの破損を退避できるのであれば、上の対応と併せて開発できそうな気はするのですが、、 ご回答、よろしくお願いいたします。

  • テキストファイルやcsvファイルで読み込んだデータを使ってjavascriptで処理する方法

    javascript初心者です。 いろいろと調べたのですが、イマイチよく分からないので質問させてください。 テキストファイルやcsvファイルを読み込んで、 javascriptで判定処理をしたいと思います。 例えば、 A地区,1 B地区,0 C地区,4 ・・・ といったデータを読み込んで、 javascriptで「0なら○地区には画像Aを表示、 それ以外なら○地区には画像Bを表示する」 という形で処理したいです。 でも、 ・どうやってファイルを読み込むのか ・読み込んだデータをどのようにして配列へ入れるのか がよく分からないです。 これらのページ 「http://q.hatena.ne.jp/1195740627」 「http://www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter03/002/index.html」 のような方法を参考にすれば実現可能なのでしょうか。

  • JavaScriptとphpでできますか?

    お世話になります。 ずーっと考えているのですが、実現方法及び、実現できるのかどうか、 で悩んでいます。 アドバイスをお願いいたします。 Aさんが、あるサイトのボタンクリックすると、Bさんの待ち受け画面htmlにつながります。 (ここまでは某APIにて実現しています(電話)) その際に、追加でAさんのURLをBさんのサイトに表示させたいのです。 方法として、Aさんがボタンクリックしたときに、JavaScriptでURLを取得し、 POSTデータにして、ajax通信でBさんのサイトにあるphpを実行。 でも、phpでURLデータは取得できるとして、その後、どうやってBさんのhtmlに出力させるの(既にhtmlは表示されているし)? Bさんhtmlの中の表示させたい<div>などに <?php echo "{$url}"; ?>などできる? もし出来たとして、その場合、Aさんは(ソースコードレベルで)どうやってBさんにデータを渡すの? phpを実行させるの? phpの名前は? Aさん、Bさんのhtmlは同一Webサーバーです。 Bさんのhtmlは最初から表示されています。 考えても、考えても 出来そうで出来ない。。。 こんなことは出来ないのでしょうか? どなたかアドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • 排他制御について

    初めまして。 今回初めての投稿になります。 至らないことが多々あるかと思いますがその時は、ご指摘ください。 本題に、入りますと 今アクセスカウンターを作成してるのですけど。 サーバーでflock関数が使えないようなので、排他制御をmkdirでしようと色々調べていたのですが 下のようなサンプルを見つけ色々いじってみたんですが(下記はサンプルのままです。途中にechoがあったので消しておきましたが。) 疑問があります。 $dirnam = "lock"; $scnt0 = 0; while(mkdir($dirnam) === FALSE){ if ($scnt0++ >= 3){ rmdir($dirnam); exit(); } sleep(1); } $scnt0 = 0; while(mkdir($dirnam) === FALSE){ if ($scnt0++ >= 3){ rmdir($dirnam); exit(); } sleep(1); } rmdir($dirnam); 1:3行目は、下記の用に記述では何か問題があるのでしょうか? if(mkdir($dirnam) === FALSE){ while($sct0++ >= 3){ rmdir($dirnam); exit(); } sleep(1); } 2:この構文だと同時アクセスした時に、仮に最初のアクセスが3秒以上かかった場合(ほぼそんなことは、ないだろうと思いますが)lockディレクトリーを消してしまう可能性があるかどうかです。 PHPは、初心者です。 よろしくお願いします。 OS:XP サーバー:レンタル(ホスティング) PHPver:PHP5.3.1

    • 締切済み
    • PHP
  • JavaScriptで検索

    html+JavaScriptで簡単な検索システムの構築 (CDROMコンテンツ)考えております。 JavaScriptのみで構築するため、サーバサイド スクリプトもDBも使用しません。 (ajaxでサーバと通信しない感じです。) 例えば商品名、金額等で検索できるシステムを 想定するとします。 DBとしてデータファイル作成し、JavaScriptでその ファイルを開き検索するという方式しか思いつかない のですが、このやり方が一般的なのでしょうか。 ご存知の方、おられましたらご教授下さい。

  • サーバー側のデータチェックの必要性

    現在JavaとJavascriptでWebアプリケーションを制作しています。 サーバーとの通信はすべてAjaxを使用して、Formで渡すような方法は取っていません。 Javascript側では細かいデータのチェックは行っているのですが、Java側ではデータのチェックを行っていません。 Ajax通信であるため、仮にブラウザでJavascriptを「無効」にしてしまうとAjaxそのものが起動しないためデータをサーバー側に送ることができなくなります。 このことを利用して、Javascript側で完璧なデータチェックを行い、Java側でのデータチェックを省略しています。 ただ、多くの手引書を見るとサーバー側(Java側)でもデータチェックを行う必要があると書かかれていますが、Ajaxのみで通信しているシステムにもこのことは当てはまるのでしょうか。 私の場合どのような危険性や問題点があるかご指摘ください。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • Office2003 排他制御の使用者メッセージについて教えて下さい。

    Office2003 排他制御の使用者メッセージについて教えて下さい。 ■環境 OS WindowsXPSP3 Office2003SP3+Office2007互換パック ■背景 ファイルサーバー上のOfficeファイルを利用する運用をしています。 Officeの排他制御であれば複数人利用した時に、通常利用者メッセージが 表示されるはずですがなぜか利用者メッセージが表示されません。 ユーザー名設定は正常に行われています。 ■検証結果 ・Excel2003 xls  NG xlsx OK ・Word2003 doc  OK docx OK ・PowerPoint2003 ppt  OK pptx NG ■質問 4桁拡張子で利用者メッセージが表示されないのであれば理解はできますが アプリケーションによって差がでます。また、ユーザー設定も通常通り 行っているつもりですがなぜ利用者メッセージが表示されないのでしょうか? *画像ファイルはExcel NG画面とWord OK画面です。

専門家に質問してみよう