トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     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 を用いてはいかがでしょう?

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");
あるいは、
var sendData = new LoadVars();
sendData.ok_page = "データ1";
sendData.to_mail = "データ2";
cgiURL = "宛先URL";
sendData.send(cgiURL, "_self", "POST");
とか。

それでも、ダメなら、
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データ送信
引用:
それでも、ダメなら、
SWFから出したクエリー文字列の「_(アンダーバー)」が%5Fにエンコードされている。
#こちらを先に試さずに、LoadVarsを先に試してください。

んー、#がどうもいかがわしい感じ
今回もcgi側で送られて来たキーの部分もデコードすれば動くと思いますけど
POST(sendAndLoad)ならばこんな感じでうまくいかないですかね。。
LoadVars.prototype.mySendAndLoad = function(url, response, method) {
	LoadVars.prototype._toString = LoadVars.prototype.toString;
	LoadVars.prototype.toString = function() {
		return unescape(this._toString());
	};
	ASSetPropFlags(LoadVars.prototype, "_toString", 3);
	this.sendAndLoad(url, response,  method);
	LoadVars.prototype.toString = LoadVars.prototype._toString;
};
ASSetPropFlags(LoadVars.prototype, "mySendAndLoad", 3);
// --------------------------------
sendData = new LoadVars();
sendData.ok_page = "データ1";
sendData.to_mail = "データ2";
response = new LoadVars();
response.onLoad = function(ok){
	trace(ok);
}

sendData.mySendAndLoad("xxxx.cgi",response,"POST");


----------------
- yo

渡辺 隆彦
Åê¹Æ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");
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops