2005/04/06 20:53
getURLとは
ActionScriptからサーバサイドへリクエストを投げて、レスポンスはブラウザで受け取る仕組み。
getURL(url:String, target:String, method:String) url:呼び出すURL。相対パスはOSとブラウザの組み合わせによって起点が変わる。。。 target:ブラウザのターゲット。_self, _top, _blank等HTMLと同じように指定 method:GET,POSTから選択。指定をしないと自動的に選択される。
getURL(url:String, target:String, method:String)
url:呼び出すURL。相対パスはOSとブラウザの組み合わせによって起点が変わる。。。
target:ブラウザのターゲット。_self, _top, _blank等HTMLと同じように指定
method:GET,POSTから選択。指定をしないと自動的に選択される。
あり得ない実装や、あり得ないブラウザによる違いが。。。
配列をPOSTで渡すと、リクエストにあり得ない文字列が入ってくる!
本来はPOSTヘッダにカンマ区切りで値が入るはずだが、ActionScriptはカンマ区切りした値をPOSTヘッダに詰めている模様。ヘッダ上ではカンマはエンコードされてしまってヘッダから取り出される値は配列ではなくてカンマ区切りの文字列になってしまう。
へたれ実装が直っても問題がないように、ActionScriptで配列を無理矢理カンマ区切り文字列にし、サーバサイドではActionFormのセッターで配列の長さが1な場合はカンマでsplit。もともとカンマの含まれる値には使用できないが、とりあえずは強制対処。
※GETを使用には問題ない。getURL("www.example.com?hoge=a&hoge=b", "_blank","GET");はうまくいくのだ。
IEでPOSTデータが送信されない!
getURLで送られるデータは、気持ち悪いことにActionScriptで定義してある変数全てが対象(たぶん同じスコープが対象だとは思うけど、mx.cor e.Applicationを継承したクラスを作ってgetURLさせてもうまくいかなかった)。
var hogehoge; function test() { hogehoge = "fugafuga"; getURL("www.example.com", "_blank", "POST"); }
こんな感じにするとhogehogeという名前でfugafugaという値はサーバに送信される。
が、IEで上記コードを実行すると名前も値も送信されない。まぁ、サンプルを見ても上記のようには書いていないのは書いていないのだが、あまりにひどい。ブラウザによって違いがあるってどういうことさ、Macromedia!。HTMLとかわんないじゃん。
ただしくはこう書く。
var hogehoge:String; function test() { hogehoge = "fugafuga"; getURL("www.example.com", "_blank", "POST"); }
めでたしめでたし(flash嫌い)。
frameにmxmlをいれた場合に、IEではgetURLの起点が変わるのか、変数が送信されなくなってしまう(FireFoxは問題無し。そもそもthis.getURLでthis.hogeの変数を送信しているのに起点が違う?阿呆か?お前は?)。
ファイルアップロード等でフレームを使用する場合、getURLを行う本体のHTMLにiframeで別mxmlとfileのアップロードhtmlを割り当てれば何とか回避できる。
Macromediaのサポートによると、POSTでa=1&a=2&というように送信する方法はないようです。代わりにGETで配列を簡単に遅れる方法というのは紹介してくれましたが、「tomcatでGETに日本語が含まれると正しくデコードされない(仕様ということで決着済)ので」と但し書きをして質問したんですけどねぇ。ま、tomcatなんてしらんよ、JRun使えよ、ってとこなんでしょうか。
申請職務:Flexプログラム要員
忙しい時にお邪魔します。会社は全部にFlexプログラム要員の30名ぐらいにいる。費用は600円/
時間しかないです。ご連絡してください。よろしくお願い致します。会社のホームページ
None
どうもありがとうございます、 田中
田中さん?は通り名かな? ひどいスパム行為を仕事で行っているリテラシの低さを示すためにコメントはそのまま残します。 そもそも日本語がおかしいし、リンク先のサイトも化け化けでまともな人は行かないと思うし。費用600円/時間って日本中どの地域でも最低賃金を割ってるんじゃね?