2010-07-15 3 views
4

Je ne suis pas sûr exactement ce qui se passe ici, mais j'ai compris que URLLoader.close(); est la cause.Dans AS3, URLLoader.close(); causer des problèmes si rien n'est chargé?

J'ai une application simple par laquelle un utilisateur entre des informations dans une zone de texte, puis j'envoie cette information à un script PHP et retourne la sortie. Une fois la sortie reçue, vous pouvez cliquer sur un nouveau bouton qui réinitialise l'application. L'erreur réside dans la fonction qui s'exécute après avoir cliqué sur ce bouton.

Si vous cliquez sur ce bouton pour réinitialiser l'application, il réinitialise toutes les variables, etc., mais il semble que ma méthode addEventListener ne s'exécute pas.

Voici la fonction de remise à zéro:

//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(); 
} 

Après cette exécute, mon goButton ne fonctionne plus.

Si le goButton est cliqué, il doit exécuter les éléments suivants:

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); 
    } 
} 

Et enfin, la fonction onComplete:

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

    outputTextBox.text=receivedData; 

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

Notez que toutes les variables non déclarées dans les fonctions sont déclarées globalement.

Donc, je suis tombé sur le fait que si je supprime myLoader.close(); de la fonction clearApplication alors tout fonctionne bien. Mon goButton n'a pas de problèmes et s'exécute comme prévu si tous les champs de texte sont remplis.

Je sais que ce n'est pas nécessaire si rien n'est actuellement chargé, mais il est là car je ne sais jamais s'il va se bloquer et a besoin être annulé. Pourquoi myLoader.close(); provoquer quelque chose comme cela se produire? Editer: Désolé, j'ai fait quelques erreurs en essayant de simplifier mon code pour l'exemple suivant.

Répondre

5

Est-ce que URLLoader.close() cause des problèmes si rien n'est chargé?

Oui, il le fait. De livedocs page for URLLoader.close()

Toute opération de chargement en cours est immédiatement terminée. Si aucune URL n'est en cours de diffusion, une erreur de flux non valide est renvoyée.

Apparemment, vous n'utilisez pas la version de débogage du lecteur Flash et vous ne voyez donc pas l'erreur générée. Le debug version of Flash player - est un must pour les développeurs Flash/Flex.

Si vous mettez l'appel à close() dans try block et attraper l'erreur, vous pouvez voir ce qui se passe.

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

Aw ... Je ne peux pas croire que j'ai raté ça! C'est exactement là que j'ai trouvé la méthode close() en premier lieu. Je dois être plus prudent. Et merci, je n'avais pas réalisé qu'il y avait un joueur de débogage mais je pensais qu'il me manquait définitivement quelque chose! – Structure

Questions connexes