電子書籍の厳選無料作品が豊富!

getURLを使用したときのGETの引数について。

いつもお世話になっています。
GET扱われ方について分からないことがあったので、教えてください。

インスタンス名【bot1】にgetURLを指定して飛ばすと、どうしてもIEで
見たときにうまく表示されませんでした。

bot1.onPress = function(){ getURL("../estate/e_list.html?category=11&public=2");}

それでgetURLの引数が足りないのかと思い

bot1.onPress = function(){ getURL("../estate/e_list.html?category=11&public=2","" ,"get");}

とした所、URLにbot1にマウスオーバー時に指定している関数名等が表示されて、これもうまくいきませんでした。

結局URLを変数に入れて、getURLに渡すとうまくいきました。
処理的にはうまくいったのですが、なぜgetURLに引数を指定したときに、予期しない値がURLに表示
されてしまったのでしょうか。
いくら調べても分かりませんでした。


お忙しい中大変申し訳ないのですが、
教えてください。
宜しくお願いします。

A 回答 (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 オブジェクトにも当然ながら持ち主がいて、参照するには持ち主を正確に指定しなければなりません。
他の階層から値を設定したり送信を行う場合は、ターゲットパスの誤りにご注意ください。
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまい大変申し訳御座いませんでした。

丁寧に教えて頂き、ホントに有難うございます。
すごく分かりやすくて、もやもやがすっきりしました。

LoadVars クラスを使って書き直したところ上手く動いてくれまして。

お忙しいところ質問に答えて下さいまして、
本当に有難うございました^^

お礼日時:2010/07/30 13:30

#1です


うお、これはすごい! 2つめの書式、
bot1.onPress = function(){ getURL("../estate/e_list.html","" ,"get");}
とやったら、本当に内部のプロパティやら関数やらが勝手にURLに付加されますね~
なんという仕様(笑
考えてみたらAS2のMovieClipって、変数も関数も全部プロパティなんだから、そう考えると自然?な動作なのかもしれません。
送信されても対向側で評価しなければいいわけですけど。。すごく気持ち悪い。

こちらが勉強になりました。thanks
    • good
    • 0
この回答へのお礼

aspnetさん
何度も投稿して下さいまして、本当にありがとうございます。

教えて頂くと納得なんですが、
それでもなんだか気持が悪いですね^^

お忙しい中、何度も投稿して頂き、有難うございました。

お礼日時:2010/07/30 13:34

どうマズかったのかかかれてないので、はっきりとはわかりませんが、それはきっとリテラル文字列(定数)だったので、勝手にURLエンコ(エンコード)したんでしょう。


Flashはエンコードもデコードも自動でやるんで、ウザいといえばウザいです。
2番目にやられた書式でも、ターゲットとメソッドが別記されただけで基本的には同じです。
変数にいれて呼べばURLエンコードはかかりません。
外していたらごめんなさい。

参考URL:http://ja.wikipedia.org/wiki/URL%E3%82%A8%E3%83% …
    • good
    • 0
この回答へのお礼

aspnetさん
回答ありがとうございます。

スイマセン完全に自分の説明不足でした。

ボタンを押した時に、出力したいURLは出せたのですが、
その指定したURLの後にactionscript内で指定している
関数名がくっついてきてしまったので、どうしてかな??
という質問でした。

なぜ変数にURLを入れるだけで解決したのかも、分かりませんし、
自分の中で疑問が増えるばかりです。

昨日から、調べているのですが、全然分かりません。
どうか無知な私に教えてください、宜しくお願いします。

お礼日時:2010/07/27 12:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!