AIR的URLLoader不支持对静态文件使用POST方法获取

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:AIR的URLLoader不支持对静态文件使用POST方法获取
  • 本文链接:http://zengrong.net/post/1235.htm

在AIR中对静态文件使用POST方法获取内容的时候,会出现一个IOError错误:

[IOErrorEvent type=”ioError” bubbles=false cancelable=false
eventPhase=2 text=”Error #2032: Stream Error. URL:
http://demo.zengrong.net/freeroom/index.html” errorID=2032]

注意,只有对 真正的纯静态文件 才会发生这样的错误,而对于使用URL重写方式虚拟出来的静态文件,则不会报错。(本文地址就是用UrlRewrite重写出来的,不信的可以试试 2013-01-24 本博客已经改为静态化地址了,请另找地方测试)

  • 对于以 file:/// 开头的本地文件,不会报错。
  • 在非AIR环境下,也完全正常,不会报错。

究其原因,可能是由于AIR对HTTP协议的方法实现得更加标准。因为AIR不仅支持POST和GET方法,还支持PUT和DELETE方法。 不了解PUT、DELETE、GET、POST的看这里

看下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       applicationComplete="windowedapplication1_applicationCompleteHandler(event)">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
        {
            _loader = new URLLoader();
            _loader.addEventListener(Event.COMPLETE,handler_comp);
            _loader.addEventListener(IOErrorEvent.IO_ERROR,handler_err);
            var __request:URLRequest = new URLRequest('http://demo.zengrong.net/freeroom/index.html');
            __request.method = URLRequestMethod.POST;
            _loader.load(__request);
        }

        private var _loader:URLLoader;

        private function handler_comp(evt:Event):void
        {
            trace(_loader.data);
        }

        private function handler_err(evt:IOErrorEvent):void
        {
            trace(evt.toString());
        }

    ]]>
</fx:Script>
</s:WindowedApplication>