CGIから読み込まれる値が変化しない | デザインってオモシロイ -MdN Design Interactive-
【サイトリニューアル!】新サイトはこちらMdNについて


Webデザインには、あなたの知らない「落とし穴」がたくさん。大きなものから小さなものまで、それが及ぼす影響はさまざまだ。カンペキだと思っているあなたのサイトも、実はすでに暗い穴の中かも……。

危険度の説明


危険度3
CGIから読み込まれる値が変化しない


読み込むたびに返す値が変化するCGIをFlashから何度も読み込んだとき、CGI内部では正常に値を生成しているにもかかわらず、Flashには同じ値しか反映されないことがある。これは、CGIファイル自体をブラウザがキャッシュしてしまうために起きる現象だ。

これを回避するには読み込むCGIファイル名を、毎回違ったファイル名のように見せかければよい。ファイル名のあとに「?」を付け、毎回ランダムな数字を追加するのだ。「?」以降の数値はCGIへ渡すデータとなるわけだが、呼び出し専用の場合は使用されないので問題ない。

サンプルとしてカウンターのようなphpを用意する【1】。ActionScript(以下、AS)へCGIの変数を返す場合、CGI内部では最終的にテキストデータとして出力するようにプログラムする(print('count='.$count);)。Flashでは外部テキストファイル(静的)を用意して読み込むのと同じ扱いであることを覚えておこう。サンプルは「count」が変数として、「$count」が実際の値として出力される。

Flash側では【2】ようなものを用意。AS 2は【3】、AS 3は【4】のようになる。POSTfileにCGIファイル名とランダムな数値を付け加えるところはAS 2、AS 3共通であるが、AS 2はloadVariables()を行い、onDataでロード完了後表示を行うようにする。ロードされる変数はそのまま読み込まれたムービークップ(以下、M.C.)のグローバル変数として格納されるのでそのまま利用できる。

AS 3は、まずURLLoader型の変数loaderを用意しloadを実行させる。addEventListenerでロード完了後、読み込まれたデータを処理するPrintText関数を実行するように宣言する。読み込まれたデータは、「変数と値」が対になっており、URLVariables型のloader.dataに格納されるので、必要な変数を抽出すればよい。

【1】例としてアクセスカウンターのphpを用意。counter.datというファイルを読み込み、値に1を足して再び書き込む。Flashには「count」という変数が値とともに戻される
【1】例としてアクセスカウンターのphpを用意。counter.datというファイルを読み込み、値に1を足して再び書き込む。Flashには「count」という変数が値とともに戻される

【2】読み込むFlashのサンプル。ダイナミックテキストを用意
【2】読み込むFlashのサンプル。ダイナミックテキストを用意

【3】【1】のoutputdata.phpを呼び出し、ダイナミックテキストinputに結果を出力するAS 2
【3】【1】のoutputdata.phpを呼び出し、ダイナミックテキストinputに結果を出力するAS 2

【4】【1】のoutputdata.phpを呼び出し、M.C.「input」のダイナミックテキストに結果を出力するAS 3
【4】【1】のoutputdata.phpを呼び出し、M.C.「input」のダイナミックテキストに結果を出力するAS 3



文=DtoP
Profile/企画段階からのサイト構築、CGI、デザイン、コーディングやFlashコンテンツ制作、携帯向けサイトなどWebサービスを日々追求しております。www.dtop.jp/


(※本文中、及びキャプション内で使用している「<」、「>」は、全角になります。ご注意ください。)
【落とし穴一覧】へ戻る
twitter facebook このエントリーをはてなブックマークに追加 RSS
【サイトリニューアル!】新サイトはこちらMdNについて

この連載のすべての記事

アクセスランキング

8.30-9.5

MdN BOOKS|デザインの本

Pick upコンテンツ

現在