URLLoader.dataの戻り値について・補足
こちらのエントリーで取り上げた問題ですが、taro先生による解説で原因が判明しました。
例として、下記のようなコードでURLLoader.load()を実行します。
var req:URLRequest = new URLRequest(); req.method = URLRequestMethod.POST; req.url = "http://hoge.com/api/hoge/"; var value:String = "hoge"; var variables:URLVariables = new URLVariables(); variables.key = value; req.data = variables; var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES; urlLoader.addEventListener( Event.COMPLETE, urlLoadCompleteHandler ); urlLoader.load( req );
この時、APIからのレスポンスを
<node><![CDATA[http://www.hoge.com/hoge.php?id1=00000&id2=00000]]></node>
とし、urlLoader.dataで受けると、
URLVariablesは名前と値のペアを含むURLエンコードされたストリングを扱う為、&の位置でスプリットされ
_urlLoader.data['<node><![CDATA[http://www.hoge.com/hoge.php?id1'] //00000 _urlLoader.data.id2 //00000]]></node>
というカタチで格納されることになります。
このレスポンスをどう受け取るかという問題ですが、API側で値の調整ができない場合、前の記事で行っていたload直後にdataFormatをTEXTにするという対応は一応回避策としては有効であるといえます。
_urlLoader.load( req ); _urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
前の記事で主に問題にしていたのは、この&でスプリットされる所だったのでやや焦点がずれるカタチですが、なんにしても戻り値の取り扱いには注意が必要ですね。