2010-04-21 21 views
1

我在刷新xml文件時遇到問題。我通過HTTP服務組件將其引入,並將其放入一個可綁定數組_cattArr中,該數組用作網格的數據提供者。通過Flex中的HTTPService刷新XML文件

當某人向數據網格添加項目時,它會保存到同一個xml文件中。然後關閉窗口,重新打開窗口,看不到添加的項目。

它寫入到xml文件,因爲當我重新啓動flex應用程序時,該項目已添加,它只是不刷新它。我試圖重新發送httpservice,但仍然沒有運氣。這樣做的正確過程是什麼?

回答

1

我的猜測是瀏覽器正在緩存文件,畢竟Flex和Flashplayer都使用瀏覽器作爲基礎。

在服務器端,您可以嘗試設置無緩存頭 - 這取決於您的服務器。

在客戶端有你可以做各種事情:

  • 使用POST而非GET來,職位未被緩存
  • 附加一個「版本」號的查詢字符串:http://server/file.xml?版本= 1234。如果您爲每個請求使用新版本,則瀏覽器必須下載它並且不會從緩存中提供它。
+0

謝謝,所有這些答案的工作。 – pfunc 2010-04-22 16:20:31

0

正如前面的回覆中提到的,最簡單的解決方案是在進行HttpService調用之前,簡單地在URL中附加一個虛擬隨機http參數。例如

var hs:HttpService = new HttpService(); 
hs.url = "http://myserver/files/myXml1.xml?t=" + new Date().getTime(); 
//attach listeners to hs 
hs.send(); 

這樣你就永遠不會從瀏覽器中獲得緩存的xml。 謝謝。

0

始終添加一個隨機數,以獲得新的XML文件..

阿圖爾·亞達夫

0

我同意隨機參數的時記入到URL。我只是每一個服務被稱爲(在結果處理)時增加一個變量,並嵌入帕拉姆到URL的末尾:

<mx:HTTPService id="getService" 
    url="http://serverpath/GetService.php?t={incNum}" 
    method="POST" resultFormat="xml" 
    result="getServiceResult(event)" fault="getServiceFault(event)" useProxy="false"/> 

... 
... 

[Bindable] 
private var incNum:int; 

public function doInc():void : 
    incNum++; 
} 

private function getServiceResult(e:Event):void { 
    // get XML and disperse it to the UI 
    doInc(); 
} 
private function getServiceFault(e:Event):void { 
    // report error codes, and fail gracefully 
} 

因此,對於每一個服務電話,你可以增加對正該號碼結果。 (你也可以根據你想要的結構來做到這一點)。這將保證瀏覽器總是不得不對數據庫進行新的非緩存調用,並檢索新保存的數據以供你的UI。