2013-01-16 6 views
0

Je suis nouveau à actionscript et flash, mais je réussi à faire du code qui récupère les données à partir du fichier php et rafraîchir résultat toutes les 30 secondes:Rafraîchissant toutes les XX secondes

var timerRefreshRate:Number = 30000; 
var fatherTime:Timer = new Timer(timerRefreshRate, 0); 
fatherTime.addEventListener(TimerEvent.TIMER, testaa); 
fatherTime.start(); 

function testaa(event:Event):void{ 

    var loader:URLLoader = new URLLoader(); 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.addEventListener(Event.COMPLETE,varsLoaded); 
    loader.load(new URLRequest("data.php")); 

    function varsLoaded (event:Event):void { 
     this.opaqueBackground = loader.data.color; 
     title.text=loader.data.title; 
     banner_text.text=loader.data.text; 

    } 
} 

Mais maintenant je suis face à 2 problèmes:

1.) L'utilisateur doit attendre 30 secondes avant que le film ne soit chargé pour la première fois

2.) La définition de la couleur d'arrière-plan ne fonctionne plus.

Qu'est-ce que je fais de mal?

+1

vous pouvez mettre en valeur booléenne qui est définie sur true une fois qu'il est chargé la première fois qu'il est chargé et s'il est vrai alors fixé le taux de rafraîchissement. cela résoudrait un problème! –

Répondre

4

Vous pouvez appeler votre fonction une seule fois pour charger immédiatement sans attendre 30 secondes. Il suffit de modifier les paramètres de la fonction par défaut à un événement null:

function testaa(event:Event = null):void{  
    //...  
} 

Maintenant, vous pouvez appeler la fonction comme ceci:

//... 
fatherTime.start(); 
testaa(); 

Vous déclenchez le chronomètre, mais exécuter immédiatement la fonction une fois. Pour votre deuxième problème, le problème est probablement lié à l'utilisation d'une fonction imbriquée. Par conséquent, this ne fait pas référence à votre classe, mais à la fonction testaa. Les fonctions imbriquées sont une mauvaise pratique en général et vous devriez les éviter si possible. Déplacez la fonction et la référence du chargeur à l'extérieur et cela devrait fonctionner. Le résultat final devrait être quelque chose comme ceci:

var loader:URLLoader; 
var timerRefreshRate:Number = 30000; 
var fatherTime:Timer = new Timer(timerRefreshRate, 0); 
fatherTime.addEventListener(TimerEvent.TIMER, testaa); 
fatherTime.start(); 
testaa(); 

function testaa(event:Event = null):void{ 

    loader = new URLLoader(); 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.addEventListener(Event.COMPLETE,varsLoaded); 
    loader.load(new URLRequest("data.php")); 
} 

function varsLoaded (event:Event):void { 
    this.opaqueBackground = loader.data.color; 
    title.text=loader.data.title; 
    banner_text.text=loader.data.text;  
} 
+0

Tnx pour une réponse rapide, excellente solution pour le 1er problème, mais pour le second problème: quand je "sépare" ces fonctions, j'obtiens cette erreur: "1120: Accès du chargeur de propriété indéfini". Je pense que ces 2 fonctions doivent être connectées en quelque sorte ... – SomeoneS

+0

@SomeoneS Désolé, vous avez raison. J'ai modifié la réponse pour déplacer une référence à l'URLLoader en dehors de la fonction. –

+0

Tnx man, ça marche super bien maintenant :) – SomeoneS

Questions connexes