flash - 在AS3中,URLLoader.close();如果没有加载任何内容会导致问题吗?

标签 flash actionscript-3

我不确定这里到底发生了什么,但确实发现 URLLoader.close(); 是原因。

我有一个简单的应用程序,用户在文本框中输入信息,然后我将该信息发送到 PHP 脚本并返回输出。收到输出后,您可以单击一个新按钮来重置应用程序。错误在于单击该按钮后执行的函数。

如果您单击该按钮来重置应用程序,它会重置所有变量等,但似乎我的 addEventListener 方法不会执行。

这是重置函数:

//Reset function if the Reset button is pressed
function clearApplication(e:MouseEvent):void {
    receivedData="";
    data1TextBox.text="";
    data2TextBox.text="";
    resetButton.visible=false;
    resetButton.removeEventListener(MouseEvent.CLICK, clearApplication, false);
    goButton.visible=true;
    goButton.addEventListener(MouseEvent.CLICK, getData, false, 0, true);
    myLoader.close();
}

执行后,我的 goButton 不再起作用。

如果单击goButton,它应该执行以下操作:

function getData(e:MouseEvent):void {
    if (data1TextBox.text!=""&&data2TextBox.text!="") {
        goButton.removeEventListener(MouseEvent.CLICK, getData, false);
        goButton.visible=false;

        postVars = new URLVariables();
        postVars.data1=data1TextBox.text;
        postVars.data2=data2TextBox.text;

        myRequest=new URLRequest("URL");
        myRequest.method=URLRequestMethod.POST;
        myRequest.data=postVars;

        myLoader.addEventListener(Event.COMPLETE, onComplete, false, 0, true);
        myLoader.load(myRequest);
    }
}

最后是 onComplete 函数:

function onComplete(e:Event):void {
    receivedData=e.target.data;

    outputTextBox.text=receivedData;

    resetButton.visible=true;
    resetButton.addEventListener(MouseEvent.CLICK, clearApplication, false, 0, true);
}

请注意,函数内未声明的任何变量都是全局声明的。

所以,我偶然发现这样一个事实:如果我从 clearApplication 函数中删除 myLoader.close(); ,那么一切都会顺利进行。如果所有文本字段都已填写,我的 goButton 没有问题并按预期执行。

我知道如果当前没有加载任何内容,则没有必要,但它就在那里,因为我永远不知道它是否会挂起并需要取消。为什么myLoader.close();会导致这样的事情发生?

编辑:抱歉,在尝试简化示例代码时犯了一些错误。

最佳答案

Does URLLoader.close() cause problems if nothing is being loaded?

是的,确实如此。来自 livedocs page for URLLoader.close()

Any load operation in progress is immediately terminated. If no URL is currently being streamed, an invalid stream error is thrown.

显然您没有使用 Flash 播放器的调试版本,因此没有看到抛出的错误。 debug version of Flash player - 是 Fl​​ash/Flex 开发人员的必备工具。

如果您在 try block 中调用 close() 并捕获错误,您就可以看到发生了什么。

try 
{
  myLoader.close();
}
catch(e:Error) 
{
  trace("An error occurred " + e.toString());
}

关于flash - 在AS3中,URLLoader.close();如果没有加载任何内容会导致问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3253293/

相关文章:

actionscript-3 - 将 NFC 读取器与 Adob​​e AIR 结合使用

actionscript-3 - Flex 4.0/4.5全局错误处理

apache-flex - 当我定位到fp10时,为什么HTML模板在Flex Builder中消失了?

php - 通过PHP从MySQL到AS3检索信息

actionscript-3 - 当我运行 Flash 游戏时,图形分辨率会降低

android - 从 Adob​​e Air android 应用程序发布到 facebook 墙

android - 在 URL 和 Windows 文件名 (AIR) 之间转换?

javascript - html5 对矢量图形动画有用吗?

actionscript-3 - ActionScript 函数可以找出自己的名字吗?

apache-flex - Adobe Flex 中的集合