« グラデーション拡張機能作ったよ | メイン | 整列拡張機能 AlignAssist を作ってみた »

LoadVarsとデータフォーマット

FlashでLoadVars+json.asを使ってJSONを読む時の注意を読んで、補足というか自分なりのまとめを書いておきたいと思います。

Flash で csv 読もうとして一度はぶち当たる壁なんですが、自前でパースが必要なデータを読み込む場合は必ず onData で処理する必要があります。
これって LoadVars に限らず XML でも同じで、自前でパースしたければ XML.onData で処理しなきゃなりません。
ただしそうすると onLoad が呼ばれなくなるので、onData の末尾で this.load( true ); と呼んであげます。

「あれ、本来 onLoad でやってた処理を onData に書けばいいんじゃないの?」

と思う人もいるかもしれませんが、onLoad を残しておくとパースに失敗した時に this.load( false ); を呼べばエラー処理を任せられるので、エラーチェックが多岐に渡る場合も想定して常日頃からそうしておいた方が無難です。

 
ところで as3 では URLLoader.dataFormat プロパティを用いて読み込んだデータの制御方法を指定できます。
指定できるのは以下の3種類

 URLLoaderDataFormat.TEXT : テキストとして
 URLLoaderDataFormat.BINARY : 生のバイナリデータとして
 URLLoaderDataFormat.VARIABLES : URLエンコードされた変数として

デフォルトでは URLLoaderDataFormat.TEXT が指定されているので、onData で処理するのと同じ状況になります。
as3に移行したばかりの人は逆にここでつまづきやすいので要注意です。
自動的にパースされた状態で受け取りたいなら、いちいち URLLoaderDataFormat.VARIABLES を指定しなきゃいけませんが、面倒なので TextLoader、BinaryLoader、VarsLoader といった拡張クラスを作ってしまうのもありです。

 
もうひとつ注意点として、CGIから返ってきたデータが「&a=1&b=2」といった感じで先頭に&がついていても LoadVars の自動パースでは無視してくれたんですが、URLLoader だと実行時エラーで怒られます。

 print("&a=%d", $a );
 print("&b=%d", $b );

みたいな感じで出力を列挙しちゃってると陥りやすい罠。

 
as3の汎用クラスとか裏技的なTipsも嬉しいけど、何よりもこういったエラーケースを共有しあうのが一番いいんじゃないかなと思い始めてきました。

トラックバック

このエントリーのトラックバックURL:
http://void.heteml.jp/mt/mt-tb.cgi/77

コメントを投稿

あわせて読みたい