В AS3 делает URLLoader.close ();вызвать проблемы, если ничего не загружается? - PullRequest
4 голосов
/ 15 июля 2010

Я не уверен, что именно здесь происходит, но выяснил, что причиной является 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);
}

Обратите внимание, что любые переменные, не объявленные в функциях, объявляются глобально.

Итак, янаткнулся на то, что если я удаляю myLoader.close(); из функции clearApplication, то все работает гладко.Мой goButton не имеет проблем и выполняется должным образом, если заполнены все текстовые поля.

Я знаю, что нет необходимости, если в данный момент ничего не загружается, но он есть, поскольку я никогда не знаю, будет ли он зависатьи должен быть отменен.Почему myLoader.close(); может вызвать что-то подобное?

Редактировать: Извините, сделал несколько ошибок, пытаясь упростить мой код для примера.

1 Ответ

5 голосов
/ 15 июля 2010

Вызывает ли URLLoader.close() проблемы, если ничего не загружается?

Да, это так.Со страницы liveocs для URLLoader.close ()

Любая выполняемая операция загрузки немедленно прекращается.Если в данный момент не передается ни один URL-адрес, выдается неверная потоковая ошибка.

Очевидно, вы не используете отладочную версию проигрывателя Flash и, следовательно, не видите выбрасываемой ошибки. отладочная версия проигрывателя Flash - обязательна для разработчиков Flash / Flex.

Если вы поставите вызов close() в блоке try и поймаете ошибку, вы можете увидеть, чтопроисходит.

try 
{
  myLoader.close();
}
catch(e:Error) 
{
  trace("An error occurred " + e.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...