- ベストアンサー
ムービークリップで作成したボタンでCGIを表示させたいのですが・・・
- FLASH MX , WIN XPを使用してお問い合わせフォームを編集しています。
- ムービークリップインスタンスでできた「送信ボタン」にgetURLでKENTWEBのCGI「postmail」を読み込んで、メールを送信したいと考えています。
- しかし、ムービークリップインスタンスにCGIを読み込むと変数を読み込むことができず、エラーが発生します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
getURL は自分の階層にある変数しか送信することができません。 (階層内にある変数を全て送信します) ボタンインスタンスは1つの階層とは見なされないのでボタンがある階層(タイムライン)、ムービークリップインスタンスの場合はムービークリップ自身が持っている変数が送信されます。 例えば、送信したい変数もボタンインスタンスもステージにある(変数もボタンも持ち主は _root 階層)場合、ボタンに書いた on アクションの中で getURL を使うと、この変数は送信されます。 しかし送信ボタンがムービークリップインスタンスの場合は、ムービークリップ自身が持っている変数だけが送信されることになります。 他の階層である _root が持っている変数は送信されません。 ------------------------------------------------------------------- テキストフィールドに入力された内容を getURL で送信する場合は、要するに”送信する変数が自分のもの”でさえあればいいので、 1) テキストフィールドに入力された内容を受け取る変数名にターゲットパスを付ける 2) テキストフィールドがある階層の getURL を使う 3) getURL を実行する前に、送信ボタンであるムービークリップに送信する変数をコピーする といった方法が考えられます。 仮にステージにメールフォームである”テキスト入力”にしたテキストフィールドがあり、「プロパティ」パネルの「変数:」に” body ”という変数名が指定されているとします。 この状態では、テキストフィールドに入力された内容は変数 body に格納されます。 そして、その変数 body は _root 階層の持ち物になっています。 送信ボタンをムービークリップで作ってステージに配置してインスタンス名を” send_btn ”と付け、このインスタンスに getURL を書いて CGI に送信するものとします。 1) の方法を使う場合は、テキストフィールドの「変数:」の項目を” send_btn.body ”と変更してください。 入力された内容を格納する変数が send_btn のものになり、getURL で送信できます。 2) の方法は、インスタンス send_btn に書く getURL の前に変数を持っている階層までのターゲットパスを付けてください。 この例ですと、変数を持っているのは _root 階層で、ムービークリップインスタンス send_btn から見ると親にあたります。 従って、 _root.getURL( "***.cgi" , "_blank" , "POST" ); か _parent.getURL( "***.cgi" , "_blank" , "POST" ); といった書き方になります。 この場合は”自分の階層”とは send_btn ではなく getURL の持ち主である _root を指し、この getURL では _root にある変数が送信されます。 3) はつまり、「 _root が持っている変数 body を、自分の変数 body にコピーする」という意味です。 スクリプトにしてみますと、次のようになります。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) on(release) { //変数をコピーしてCGIに送信 this.body = _root.body; getURL( "***.cgi" , "_blank" , "GET" ); } 簡単なのは 1) か 2) ですが、メールフォームの項目が多い場合は 2) が手っ取り早くてオススメです。 いずれにしてもターゲットパスの問題ですから、ターゲットパスの誤りにはご注意ください。 ------------------------------------------------------------------- Flash MX からは LoadVars というオブジェクトが使えるようになりました。 getURL は”自分の階層にある変数全てを送信する”という少々不器用な設計になっているので、そのままでは不必要な変数も送信されてしまいます。 LoadVars は CGI 等とやりとりする専門家で、LoadVars オブジェクトに用意したものだけを送信することができます。 今回は扱いませんでしたが、機会がありましたら LoadVars の使用例も研究してみてください。