2012-03-30 99 views
0

我試圖從我們製作的Flash影片中填充的XML feed中填充一些數據。這個的主要操作是在MediaElementJS's .as文件的構造函數中。在發生事件偵聽器之前在ActionScript 3中加載XML

無論如何,主要問題是我一直在閱讀,沒有辦法在AS3中同步加載URL(我仍然很難相信)。此構造函數調用parse('url')和函數addEventListener(EVENT.ADDED_TO_STAGE, initializeAds);

現在廣告需要來自XML的信息,但XML尚未準備好。我試圖在XML解析器結束致電廣告時,我就知道這將是坦然,但它攪亂他們和廣告價值從來沒有從他們的默認值改變..

哦wherefor藝術你動作鎖定機制..

那麼無論如何要預加載URL中的數據?

CODE:

public function LoadXML(e:Event):void 
    { 
     removeEventListener(Event.COMPLETE, LoadXML); 
     var xmlData:XML = new XML(e.target.data); 

     episodeData.pre.type = [email protected]; 
     episodeData.pre.url  = xmlData.episode.pre.ad.text(); 

     episodeData.video  = Number([email protected]); /*************** I CAN'T REMEMBER ***********/ 
     episodeData.pageTitle = [email protected]; 
     episodeData.title  = [email protected]; 
     episodeData.source  = xmlData.episode.video.source.text(); 


     [email protected]; 
     episodeData.post.url=xmlData.episode.post.ad.text(); 

     episodeData.nextEpisode=xmlData.episode.post.nextepisode.text(); //if not empty redirect to this 

     xmlLoading = false; 
//THIS IS WHERE I TRIED TO CALL THE FUNCTION I NEED TO LOAD LATER 
    } 

    public function parse() 
    { 

     var xmlLoader:URLLoader = new URLLoader(); 
     //var xmlData:XML = new XML(); 
     xmlLoader.load(new URLRequest(rootURL + '/episode.aspx?associd=' + _episode)); 
     //xmlLoader.addEventListener(Event.COMPLETE, processXML); 
     xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 
    } 

我曾與一個靜態的URL地址,當然,諸如此類的東西,但沒有骰子嘗試過。

構造函數中的代碼在我動態分配靜態值時工作,但如果我嘗試將事件鏈接到一起以獲取動態值和動態賦值,它將進行計算。

在構造函數中,肯定自己都運行:

 parse(); 

     // Google IMA EventListener 
     addEventListener(Event.ADDED_TO_STAGE, initialize); 

回答

2

編輯開始

當我有這種情況發生,我需要的東西,他們兩人發生後,正在做我通常使用布爾值來存儲,如果每一個也沒發生,然後在第三函數的多個異步調用他們都打電話我檢查兩個布爾人。

以下是我願意做的是:

protected function viewnavigatorapplication1_preinitializeHandler(event:FlexEvent):void 
{ 
    var loader1:Loader = new Loader(); 
    var loader2:Loader = new Loader(); 

    loader1.addEventListener(Event.COMPLETE, loader1_completeHandler); 
    loader1.load(new URLRequest("http://www.whitehouse.gov")); 
    loader2.addEventListener(Event.COMPLETE, loader2_completeHandler); 
    loader2.load(new URLRequest("http://www.nasa.gov")); 
} 

private function loader1_completeHandler():void 
{ 
    loader1Done = true; 

    //Maybe do some stuff here 

    moveOn(); 
} 
private function loader2_completeHandler():void 
{ 
    loader2Done=true; 

    //Maybe do some stuff here 

    moveOn(); 
} 


private function moveOn():void 
{ 
    if(!loader1Done||!loader2Done) 
     return; 

    //Do whatever needs to be done once both asynchronous events have completed 
} 

如果這不是你的問題,我認爲你需要提供更多的代碼到位指示等事情發生的意見,因爲它是有點不清楚。

例如我不確定你的意思是「如果我動態地分配一個靜態值,但如果我嘗試鏈接到事件以獲取動態值和動態賦值,它將在構造函數中工作。另外,因爲沒有數據的例子或者rootURL是什麼,所以沒有辦法從這裏調試來理解發生了什麼問題。

由於沒有錯誤,我們需要能夠在本地重新編譯代碼的某些部分以提供更好的反饋。

編輯結束

阻斷或同步呼叫是關於網絡的通信的可怕的想法由於缺乏的網絡和/或服務器的可靠性。如果在執行任何其他處理之前鎖定了前端應用程序以等待響應,則會導致可怕的用戶體驗,這就是爲什麼沒有同步遠程調用的原因。

服務器爆炸時,同步調用會發生什麼情況,即使沒有響應,客戶端仍會保持鎖定狀態,用戶無法與前端任何其他內容交互,因爲它正在等待所有不會響應的響應來?以異步方式完成任何類型的遠程調用要好得多,在Java中使用本地磁盤訪問(或以其他方式)也是如此,在這種情況下使用異步非阻塞調用通常是更好的方法,以允許其他進程應用程序將繼續執行,而不考慮磁盤上的狀態或使用情況。

你在做什麼應該可以很好地工作,你打電話給遠程服務,它響應一些結果並點擊你的「偵聽器」或「回調」函數,然後你想對結果做些什麼,你可以調用另一個函數,並且數據在那裏。

這聽起來像是唯一沒有發生的事情是事實沒有反映在UI中的更新,這可能是由於缺少屬性的Bindable元數據/事件分派。您是否在返回的事件中檢查了結果,是否在數據返回後要調用的方法中放置斷點?你正在做的事情是完全可能的,甚至看起來你的大部分都是正確的,但肯定是你做錯了,導致你無法完成這項工作。如果你能解釋行爲的更清楚一點,這將幫助,還你怎麼在這裏做的:

//這是我試圖調用函數我需要加載LATER

+0

tbh我意識到這是加載的正確方式,這就是爲什麼語言改變了這種情況。 A.)我仍然想知道是否有任何可能的方法來強制它同步......然後B.)我認爲我有一些事件監聽器範圍問題的實際問題。似乎人們很多地遇到它,但我不知道它是什麼。你有什麼可以借用關於在構造函數中設置事件監聽的動態特性的AS3怪癖嗎? – 2012-03-31 07:50:31

+1

你是對的我overshot回答這個問題被包裹在關於異步的部分......我編輯我的答案上面添加一個解決方案以上的問題letwrting ...對不起 – shaunhusain 2012-03-31 18:17:42

+0

好吧我試圖更新我的回答基於我可以從你所說的內容拼湊出什麼,但是如果沒有我在上面發佈的內容中描述的某些部分,我不能真正測試你的代碼。如果我有rootURL,當你「一起鏈接到事件以獲得動態值和動態賦值」時,我可以看到你在做什麼,那麼我可以幫忙,但沒有更多的信息,我只是猜測。 – shaunhusain 2012-03-31 18:42:48

3

加載的網址永遠是異步的,所以在對URL加載的響應函數中添加事件偵聽器。

現在你的問題聽起來像你嘗試過,但有一些問題,所以張貼代碼,讓我們看看。

+0

所以我閱讀的能力檢查[字節加載](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLLoader.html)和總字節數。我也讀過你不能通過循環造成同步。在繼續操作之前是否真的沒有辦法在完成這些值之後進行檢查? – 2012-03-31 07:44:59

相關問題