- ベストアンサー
getURLを使用したときのGETの引数について
- getURLを使用した際、引数を指定すると予期しない値がURLに表示される問題が発生した。
- 問題の解決策として、URLを変数に入れてgetURLに渡すことで正常に動作した。
- なぜ引数を指定すると予期しない値がURLに表示されるのか、調査しても分からなかった。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
getURL は、getURL が書かれているタイムライン、もしくは getURL を実行したムービークリップが持っている変数を”全て”送信する仕様になっています。 例えば、次のようなスクリプトをメインのタイムラインに書いた場合、 a = 1; function Test() { trace( "Sample" ); } bot1.onPress = function() { getURL( "○○○?category=11&public=2", "_blank" , "GET" ); }; ↑ この getURL はメインのタイムラインに書かれていますから、送信しようとした category と public はもちろん、メインのタイムラインが持っている変数 a や関数 Test も送信されます。 ActionScript では、関数は” Function ”というクラスの変数のようなものです。そのため、これも変数と見なされて送信されてしまいます。 * * * つまり、getURL はタイムラインが持っている変数を全て自動的に送信してくれるということですので、実は、URL の後に ? を付けなくても変数が送信されます。 これは簡単で便利ですが、何もしなくても全部送信してくれる簡便さゆえに、送る必要のないものやはたまた関数までもが勝手に送信されてしまうところが欠点です。 Flash Player 6 からは、本当に必要なものだけを選んで送信する専用のクラス” LoadVars ”が登場しました。 LoadVars の作例です。このスクリプトはフレームに記述してください。 (↓ 各行頭に全角のスペースが入っています。コピーする際はご注意ください) //- - - //オブジェクトを作成 send_obj = new LoadVars(); //送信するデータの用意 send_obj.category = "11"; send_obj.public = "2"; //ボタンを押した時に送信 bot1.onPress = function() { send_obj.send( "○○○" , "_blank" , "GET" ); }; //- - - LoadVars は、荷札を付けた値を1つのカゴに入れ、そのカゴごとやり取りするようなものです。 荷札の名前は、受け取る側が要求する名前と一致していなければなりません。 上記の例ですと、カゴの名前が” send_obj ”、荷札の名前が” category ”と” public ”です。 このスクリプトの上に、先ほどの a = 1; などの変数や関数を追加して検証してみてください。 LoadVars に指定したものだけ送信され、余計な変数や関数は送信されなくなります。 LoadVars がなかった頃は、getURL がタイムラインにある全ての変数を送信する仕様を逆に利用して、送信を行うための専用のムービークリップを作り、それに送信したい変数を用意することで必要な変数だけを送信していました。 LoadVars はより分かりやすく送信するデータを用意できるので、Flash Player 6 以降ならばこちらの方がオススメです。 なお、LoadVars オブジェクトにも当然ながら持ち主がいて、参照するには持ち主を正確に指定しなければなりません。 他の階層から値を設定したり送信を行う場合は、ターゲットパスの誤りにご注意ください。
その他の回答 (2)
- aspnet
- ベストアンサー率79% (72/91)
#1です うお、これはすごい! 2つめの書式、 bot1.onPress = function(){ getURL("../estate/e_list.html","" ,"get");} とやったら、本当に内部のプロパティやら関数やらが勝手にURLに付加されますね~ なんという仕様(笑 考えてみたらAS2のMovieClipって、変数も関数も全部プロパティなんだから、そう考えると自然?な動作なのかもしれません。 送信されても対向側で評価しなければいいわけですけど。。すごく気持ち悪い。 こちらが勉強になりました。thanks
お礼
aspnetさん 何度も投稿して下さいまして、本当にありがとうございます。 教えて頂くと納得なんですが、 それでもなんだか気持が悪いですね^^ お忙しい中、何度も投稿して頂き、有難うございました。
- aspnet
- ベストアンサー率79% (72/91)
どうマズかったのかかかれてないので、はっきりとはわかりませんが、それはきっとリテラル文字列(定数)だったので、勝手にURLエンコ(エンコード)したんでしょう。 Flashはエンコードもデコードも自動でやるんで、ウザいといえばウザいです。 2番目にやられた書式でも、ターゲットとメソッドが別記されただけで基本的には同じです。 変数にいれて呼べばURLエンコードはかかりません。 外していたらごめんなさい。
お礼
aspnetさん 回答ありがとうございます。 スイマセン完全に自分の説明不足でした。 ボタンを押した時に、出力したいURLは出せたのですが、 その指定したURLの後にactionscript内で指定している 関数名がくっついてきてしまったので、どうしてかな?? という質問でした。 なぜ変数にURLを入れるだけで解決したのかも、分かりませんし、 自分の中で疑問が増えるばかりです。 昨日から、調べているのですが、全然分かりません。 どうか無知な私に教えてください、宜しくお願いします。
お礼
お礼が遅くなってしまい大変申し訳御座いませんでした。 丁寧に教えて頂き、ホントに有難うございます。 すごく分かりやすくて、もやもやがすっきりしました。 LoadVars クラスを使って書き直したところ上手く動いてくれまして。 お忙しいところ質問に答えて下さいまして、 本当に有難うございました^^