• ベストアンサー

FLASHからCGIへデータ送信(HIDDENのような)

FLASHからcgiへデータを送信したいのですが、テキストボックスを使ってデータを入力するのではなく、ボタンにあらかじめデータをあてはめておきたいのです。 HTMLでいう「HIDDEN」のようなものです。 そういう場合はどのようにアクションスクリプトを表記すればいいのでしょうか? FLASH5です。

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.6

#4で回答しました、DPEです。 フォームは利用しないで、ボタンが2つあり、ボタン1を押したら隠しデータ1を、ボタン2を押したら隠しデータ2を送信する、ということでしょうか? (もっとも、フォームを利用していても同じなんですが...) では、このように考えてみてはいかがでしょう。 ボタンを2つ配置したムービークリップのタイムラインのフレーム1に、変数を用意します。(ここでは仮に、hidden_dataとします) ボタン1が押されたらhidden_dataに隠しデータ1を、ボタン2が押されたらhidden_dataに隠しデータ2を設定し、getURLで送信します。それぞれのボタンに設定するスクリプトは、大体、こんな感じになるかと思います。  on (press)  {   hidden_data = "データ1";   getURL("***.cgi","***","POST");  } これでしたら、どちらのボタンが押されても送信される変数はhidden_data1つだけですし、押されたボタンごとに値を変えることができます。1つのボタンで送りたい隠しデータが複数あるなら、その数だけ変数を定義することで対応できます。 #4のお礼の欄にあったお話は、おそらく、隠しデータの設定のためにフレームの移動やstop();を使っていらっしゃるのだと思います。 ボタンを押した時点で送るデータを設定するのであれば、こうした処理もする必要はありません。ボタンが押されるまで、ムービークリップの再生を停めておくだけで済みます。

w-inty
質問者

お礼

回答ありがとうございます。 無事できました!! こういう方法もあるんですねぇ~。 空白のテキストに変数を埋め込むようにすればよかったんですね。 ありがとうございました♪

その他の回答 (5)

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.5

すみません。そちらのFLASHのバージョンを確認していませんでした。#4の言われている通りです。 変数の送信についてですが、もっと単純に考えてCGIのURLの後に記述するようにすればどうでしょうか? 例:http://xxx.xxx/xxx.cgiの後に「?」を付けて変数名=値を記述します。複数ある場合は「&」をつけてあげます。 例として、 http://xxx.xxx/xxx.cgi?a=1&b=2&c="答え" ↑ a=1 b=1 c="答え" のそれぞれをCGIへ送信します!

w-inty
質問者

お礼

回答ありがとうございます。 GETでもできるんですよね、わかってはいるんですが…自分がGETのデータの扱い(CGI)にあまり慣れていないので できればPOSTでデータ送信、が望ましいです。 やはり、#2、#4(の自分なりの解釈での方法)の方のやり方のように隠しをどこかへ表示して、実際のswfでは 表示させないような方法が簡単なんですかね(^^; #4のところにもかいたんですが、ボタンを2つ以上配置する場合はどうしたらいいのでしょうか?

  • DPE
  • ベストアンサー率85% (666/776)
回答No.4

getURLは、getURLを実行した階層のムービークリップにある全ての変数を送信します。 従って、「送信」ボタンがステージ(_root)にあるのであれば、メインのタイムラインで変数を用意し、この中に送信したいデータを設定しておけば送信されます。 メインのタイムラインに送信する必要のない変数がある時は、送信専用のムービークリップを作ると便利です。フォームと「送信」ボタンをこのムービークリップ内に設置し、隠しデータとして送りたい変数はムービークリップのタイムラインで定義します。 フォームがなく、ボタンを押すと隠しデータだけが送信されるといったものがご希望でしたら、ボタンのインスタンスを更にムービークリップに変換して入れ子にし、このタイムラインに変数を設定してみてはいかがでしょう。 LoadVarsはFlash Player 6で追加されたオブジェクトなので、Flash Player 5までしかパブリッシュできないFlash 5では使用できないと思います。

w-inty
質問者

お礼

こういうことでいいのでしょうか? on(press){ this.gotoAndPlay(2); getURL("http://flash.cgi","NAKA","POST"); } (※ボタンの後ろにテキストボックスを隠しておいて、そこにデータを入れておく。) これだとできるんですが、たとえば、隠しデータを送信したいボタンが複数あった場合はどのようにしたらいいのでしょうか? ためしに         1  2  3  4  5  6  7  8  9 ボタン1   ●------------------------→ ボタン2   ●------------------------- 隠し1       ●this.stop() 隠し2          ●this.stop(); のようにしたとします。 ボタン1を押せば、2フレーム目へ、ボタン2を押せば3フレームへいくようにアクションスクリプトを書きました。 (上記のように) ボタン1の結果は、隠し1のデータのみですが、ボタン2の結果は隠し1&隠し2のデータになってしまいます。 隠し2だけにするにはどうしたらいいのでしょうか?

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.3

myData=new LoadVars(); myData.a="okweb"; myData.b="okweb2"; myData.send("http;//www.xxx.xxx/xxx.cgi"); 上のスクリプトは a=okweb b=okweb2という値をCGIにPOSTメソッドで渡すサンプルです。 またCGIにデータを渡して返り値を得たい場合は[send]を使わないで[sendAndLoad]を使って下さい。

w-inty
質問者

お礼

回答ありがとうございます。 on(press){ myData=new LoadVars(); myData.a="okweb"; myData.b="okweb2"; myData.send("http://***.cgi"); } としてみましたが、何も起こらず…。 どこがダメなのでしょうか?

noname#5549
noname#5549
回答No.2

こんにちは。 では手っ取り早い方法を。 「テキストボックスをステージの外に配置する。」 僕はこれ使ってます。

w-inty
質問者

お礼

回答ありがとうございます。 これはやってみたらできました。 でもできればアクションスクリプトでやってみたいので他の方法も試してみます。 ありがとうございました。

  • jakarta
  • ベストアンサー率38% (607/1597)
回答No.1

ボタンにaction(getURL)を記述でいけると思いますが? もう少し違う方法を希望されるなら詳しく補足して下さい。

w-inty
質問者

お礼

回答ありがとうございます。 現在のボタンのアクションは on(press){ this.getURL("flash.cgi","NAKA","POST"); } のようになってます。 これだと通常のようにテキストボックスに入れた文字は送信できます。 隠しオブジェクトの値を送信する方法はどのようにしたらいいでしょうか?

関連するQ&A