メイン コーダーズルーム【スクリプト系】 loadVariablesでCGIデータ送信 | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
渡辺 隆彦 | Åê¹ÆNo.23778 投稿日時: 2006-2-15 21:33 |
半人前 居住地: 東京 投稿: 33
使用環境:
Arc:MacMini(1.5G PowerPC G4) OS :MacOSX(10.4.8) Appli:Flash Professional 8 |
loadVariablesでCGIデータ送信 こんばんは。渡辺と申します。
いつもお世話になっております。 いま、ムービークリップのメソッド loadVariablesを使い、CGIに対して データを送ろうと試みております。 その際、変数名にアンダーバーがある方のデータが受け取れず、 難儀しております。(アンダーバーなしの方は大丈夫です。) これはプロバイダ側で指定されたCGIを使うためのシミュレーション のため、どうしても変数名にアンダーバーを使わなくてはならないのです。 Flashのヘルプにて 「特定の文字 (+ や & など) について、URL エンコードを行う必要が あります。www.macromedia.com/go/tn_14143 を参照してください。」 との記述をみつけ、これが原因か?と思い、早速調べて、アンダーバーが %5F であることがわかったのですが、その使い方もわかりません。 具体的には、変数 ok_page を ok%5Fpage としてもパブリッシュ時にはねられてしまいます。 フォーラムの検索で、変数 特定文字 で検索したのですが それらしい記述には出会えませんでした。 ちょっとこんがらがってしまって質問の焦点がズレ気味で申し訳ありません。 とりあえず %5F の使い方は置いておいて、CGIへデータが遅れない原因に どなたか、心当たりありませんでしょうか。 (ソース-Flash側) myData2.onData = f_showResult; function f_showResult() { ... 送信完了処理 ... } myData2.ok_page = "..... データ1 ......."; <-ここが問題の箇所です。 myData2.tomail = "..... データ2 ......."; myData2.loadVariables ("..... 宛先URL .......", "post"); (ソース-CGI側) ....... 略 ........ $iyymmdd = $mydata{'ok_page'}; <-ここが問題の箇所です。 $iname = $mydata{'tomail'}; ....... 略 ........ (環境) MacMini (G4 1.5GHz) OSX 10.4.4 Flash Professional 8 |
ひろゆき | Åê¹ÆNo.23786 投稿日時: 2006-2-16 0:09 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: loadVariablesでCGIデータ送信 引用:
その際、変数名にアンダーバーがある方のデータが受け取れず、 データが受け取れていないことは、どのように確認されたのでしょう? それとも、上手く行かないので、 データが受け取れていないのでは?と思っただけでしょうか? 引用: myData2.ok_page = "..... データ1 ......."; のデータ1は、絶対パスのURLでしょうか? だとすれば、そのURLの中に「~(チルダ)」が含まれていたりしませんか? 「HTMLとメーラーの起動へのリンクアクション。」
|
渡辺 隆彦 | Åê¹ÆNo.23788 投稿日時: 2006-2-16 2:03 |
半人前 居住地: 東京 投稿: 33
使用環境:
Arc:MacMini(1.5G PowerPC G4) OS :MacOSX(10.4.8) Appli:Flash Professional 8 |
Re: loadVariablesでCGIデータ送信 ひろゆき様 お返事ありがとうございます。
説明が不十分で申し訳ありません。背景説明と同時に、投稿後に行った テストの結果も合わせて、お伝えいたします。 実は、プロバイダ側が用意したCGIに対しデータ送信をしなければならなくなり、 プロバイダ側から実際に動いている、HTML文を渡されました。(以下抜粋です) <FORM METHOD="post" ACTION="http://...... 略 ....../xxx.cgi"> <INPUT TYPE="hidden" NAME="ok_page" VALUE="https://...... 略 ...../xxx.html"> <INPUT TYPE="hidden" NAME="to_mail" VALUE="xxx@xxxx.com"> このHTML文で正しく動く事を確認した上で、Flashから送信しようと 思い立ったのがそもそもの始まりです。 ムービークリップのメソッド loadVariables を使って同じ変数名、同じデータ でPOSTしてみたのですがうまくいきませんでした。 そこで果たしてFlashからちゃんとデータが送られているのかを確かめるため 受け側のCGIを自作して、送られてきたメッセージをファイルに書き出して 確認できる用にして、テストを初めました。 1.自作のCGIが正常である事を確認するため、先のHTML文を使ってデータを 送信したところ、 ok_page=https%3A%2F%2F....... という、正しい値で送られてきている事を確認しました。 2.次にFlashにてムービークリック myData2 に対し myData2.ok_page = "https://...... 略 ...../xxx.html"; myData2.to_mail = "xxx@xxxx.com"; myData2.loadVariables ("http://...... 略 ....../xxx.cgi", "post"); (念のため変数名、データは1.と同じにしてあります。) として実行したところ、 onData=%5Btype+Function%5D&ok%5Fpage=https%3A%2F%2F....... のようなデータがCGI側で書き出されていました。 変数名 ok_page が ok%5Fpageになっているため、 $iyymmdd = $mydata{'ok_page'}; というCGI側のデータの取り出しに ひっかからなかったのだという事がわかりました。 どうしたら ok_page= のようになってくれるのかわからない状態です。 よろしくおねがいいたします。 渡辺 |
ひろゆき | Åê¹ÆNo.23794 投稿日時: 2006-2-16 3:39 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境:
10.8.5 Flash Professional CS4/CS6/CC Safari 6.1 |
Re: loadVariablesでCGIデータ送信 #なんだか違うことを書いていた気がするので、書き直しました。
tomail と to_mail のどちらが正しいのでしょうか? #Google検索すると「ok_page tomail」では検索結果0ですが、 #「ok_page to_mail」で検索すると、 #某プロバイダーのメールデコードCGI がヒットします。 #なので「to_mail」が正しいものだとして話を進めます。 MovieClip.loadVariables だと、 ムービークリップ上にある変数をすべて送ってしまいますね。 onDataも変数として送ってしまっているように思います。 #この表現で正しいかどうか、自信がありませんが。 送りたい変数だけを指定するために、 LoadVars を用いてはいかがでしょう?
それでも、ダメなら、 「SWFから出したクエリー文字列の「_(アンダーバー)」が%5Fにエンコードされている。」 #こちらを先に試さずに、LoadVarsを先に試してください。
|
渡辺 隆彦 | Åê¹ÆNo.23819 投稿日時: 2006-2-16 20:57 |
半人前 居住地: 東京 投稿: 33
使用環境:
Arc:MacMini(1.5G PowerPC G4) OS :MacOSX(10.4.8) Appli:Flash Professional 8 |
Re: loadVariablesでCGIデータ送信 ひろゆき様
お返事ありがとうございます。 >tomail と to_mail のどちらが正しいのでしょうか? to_mail が正しいです。質問しておきながら、混乱させる よう記述をしてしまい、申し訳ありません。 >LoadVars を用いてはいかがでしょう? ありがとうございます。早速試してみます。 渡辺 隆彦 |
渡辺 隆彦 | Åê¹ÆNo.23824 投稿日時: 2006-2-17 2:19 |
半人前 居住地: 東京 投稿: 33
使用環境:
Arc:MacMini(1.5G PowerPC G4) OS :MacOSX(10.4.8) Appli:Flash Professional 8 |
Re: loadVariablesでCGIデータ送信 こんばんは、渡辺です。
その後アドバイスをいただきました、 LoadVars を使った送信を 以下の1、2のパターンで、テストしてみました。 結論から申しますと、うまくいきませんでした。 1. var sendData = new LoadVars(); var resultData = new LoadVars(); resultData.onLoad = function(success) { if (success) { //送信完了処理 } }; sendData.ok_page = "データ1"; sendData.to_mail = "データ2"; cgiURL = "宛先URL"; sendData.sendAndLoad(cgiURL, resultData, "POST"); (結果) to%5Fmail=.... 略 ....&ok%5Fpage=https%3A%2F%2F.... 略 .... 2. var sendData = new LoadVars(); sendData.ok_page = "データ1"; sendData.to_mail = "データ2"; cgiURL = "宛先URL"; sendData.send(cgiURL, "_self", "POST"); (結果) to%5Fmail=.... 略 ....&ok%5Fpage=https%3A%2F%2F.... 略 .... 今後も、試行錯誤してみるつもりでおります。このフォーラムにプラスになり そうな結果が出ましたらお知らせしたいと思います。 とりあえずは、以下の2つを試してみるつもりでおります。 1.「SWFから出したクエリー文字列の「_(アンダーバー)」が%5Fにエンコードさ れている。」を拝見させていただきます。 2. swfからJavaScriptを読んで値をセットしてみる。 (swf側) v_ok_page = "データ1"; v_to_mail = "データ2"; getURL("java script:setParam('" + v_ok_page+ "','"+ v_to_mail +"');"); (JavaScript側) <SCRIPT LANGUAGE=JavaScript> function setParam(v_ok_page, v_to_mail) { document.msgForm.ok_page.value = v_ok_page; document.msgForm.to_mail.value = v_to_mail; document.msgForm.submit(); } </SCRIPT> ..... 略 ....... <FORM name="msgForm" METHOD="post" ACTION=".... 宛先cgi .."> <INPUT TYPE="hidden" NAME="ok_page" VALUE=""> <INPUT TYPE="hidden" NAME="to_mail" VALUE=""> </FORM> ありがとうございました。 |
youich | Åê¹ÆNo.23825 投稿日時: 2006-2-17 2:35 |
職人 居住地: kobe 投稿: 349
使用環境:
Tiger |
Re: loadVariablesでCGIデータ送信 引用:
それでも、ダメなら、 んー、#がどうもいかがわしい感じ 今回もcgi側で送られて来たキーの部分もデコードすれば動くと思いますけど POST(sendAndLoad)ならばこんな感じでうまくいかないですかね。。
|
渡辺 隆彦 | Åê¹ÆNo.23829 投稿日時: 2006-2-17 9:07 |
半人前 居住地: 東京 投稿: 33
使用環境:
Arc:MacMini(1.5G PowerPC G4) OS :MacOSX(10.4.8) Appli:Flash Professional 8 |
Re: loadVariablesでCGIデータ送信 youich 様
ありがとうございます。LoadVars クラスのメソッドをオーバーライド しているのですね。 すいません。過去のログを調べそこなってました。 がんばってみます。 |
渡辺 隆彦 | Åê¹ÆNo.24023 投稿日時: 2006-2-25 13:49 |
半人前 居住地: 東京 投稿: 33
使用環境:
Arc:MacMini(1.5G PowerPC G4) OS :MacOSX(10.4.8) Appli:Flash Professional 8 |
Re: loadVariablesでCGIデータ送信 youich 様
お返事が遅れまして申し訳ありません。その後うまくいきました。 某プロバイダのSSL用のCGIに対しFLASHのLoadVarsを使い、データを 送ることができました。最終的にはsendをオーバーライドして行いました。 ありがとうございました。 (コード) LoadVars.prototype.mySend = function(url, resmy, method) { LoadVars.prototype._toString = LoadVars.prototype.toString; LoadVars.prototype.toString = function() { return unescape(this._toString()); }; ASSetPropFlags(LoadVars.prototype, "_toString", 3); this.send(url, resmy, method); LoadVars.prototype.toString = LoadVars.prototype._toString; }; ASSetPropFlags(LoadVars.prototype, "mySend", 3); // -------------------------------- sendData = new LoadVars(); sendData.ok_page = "------ データ1 -------"; sendData.to_mail = "------ データ2 -------"; sendData.mySend("------ cgiのURL -------", "_self", "POST"); |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |