[AS3.0]Flashでリッチなテキストエディタを作る Part1 [AS3]TextAreaのスクロールバーを自動で追従させる
12月 18

一つ前のエントリーの続きで、Flashでテキストエディタを作成中。編集したテキストおよびTextFormatをXML形式に変換して、サーバにPOSTし、保存する処理を作成中に、上記のエラーが発生。

Flash側からPHPへのPOSTについては、

AS3とPHPの連携 - 基礎 - memo.at sonic

を参考にさせてもらう。たしかに、load()でPOSTするというのには違和感を感じるが、これしかないのでしょうがない。(Socketベースで通信する場合はセキュリティポリシーファイル/サーバが必要でさらに面倒)


Actionscript:
  1. // テキストフィールドのフォーマットをXMLに落とし込む
  2.  var txtxml:TextField2XML = new TextField2XML(_targetText);
  3.  var v:URLVariables = new URLVariables();
  4.  v.body = txtxml.getXML();
  5.  var req:URLRequest = new URLRequest("ポスト先のURL");
  6.  req.data = v;
  7.  req.method = URLRequestMethod.POST;
  8.  var loader:URLLoader = new URLLoader(req);
  9.  loader.dataFormat = URLLoaderDataFormat.VARIABLES;
  10.  loader.load(req);

PHP側は、$_POSTで受信したデータをDBに保存する処理を記述。


PHP:
  1. $data = $_POST["body"];
  2. // ~DBに書き出す処理・省略~

で、FlashIDE上でプレビューしてみると、

Error: Error #2101: URLVariables.decode() に渡される文字列は、名前/値のペアを含む、URL エンコーディングされたクエリー文字列でなければなりません。

という、エラーが発生。おかしいなぁ。ちゃんとURLVariablesで値を渡していて、URLエンコーディングされたクエリー文字列が生成されてるんだけどナーと思い、悩むこと30分。

やっと分かった。

呼び出し時にエラーになってるんじゃなく、呼び出した後にエラーになっている。つまり、


Actionscript:
  1. loader.load(req);

で、呼び出すURLからのレスポンスが、key=value形式になってないとエラーになるのである。

しかし、POSTしても別にレスポンスを見ないケースもあるだろうにネー。

しょうがないので、php側でexitする前に echo "ret=true";とダミーのレスポンスを返すことにする。コレでエラーは無くなった。

TextField2XMLのソースは、まだ調整中なので公開できないけど、XMLの読み書きが完了したら、サンプルとして公開する予定。

それにしても、as3になってから、URLへのGET,POSTや、FlashVarsへのアクセスが煩雑になって面倒この上ない。だれかas2互換のラッパー関数とか作ってないかな。ついでにJavaScript互換関数とかPHP互換関数とかあると嬉しいな。

知っていたら教えてください。

Popularity: 18% [?]

written by ANN

add to hatena hatena.comment (2) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (1) Total: 3

Leave a Reply