在Flex中通过HTTPService刷新XML文件

时间:2010-04-21 20:00:53

标签: flex

我在刷新xml文件时遇到问题。我通过HTTP服务组件将其引入并将其放入可绑定数组_cattArr中,我将其用作网格的数据提供者。

当有人向datagrid添加项目时,它会保存到同一个xml文件中。然后我关闭窗口,重新打开它,看不到已添加的项目。

它正在写入xml文件,因为当我重新启动flex应用程序时,该项目已被添加,它只是没有刷新它。我试图重新发送httpservice,但仍然没有运气。这样做的正确过程是什么?

4 个答案:

答案 0 :(得分:1)

我的猜测是,在所有Flex和Flashplayer都使用浏览器作为基础之后,浏览器正在缓存文件。

在服务器端,您可以尝试设置无缓存标头 - 这取决于您的服务器。

在客户端,您可以执行各种操作:

  • 使用POST代替GET,不缓存POST
  • 将“版本”编号附加到查询字符串:http://server/file.xml ?version = 1234 。如果您为每个请求使用新版本,则浏览器必须下载它并且不会从缓存中提供它。

答案 1 :(得分:0)

正如前面的回复中所提到的,最简单的解决方案是在进行HttpService调用之前简单地将伪随机http param附加到URL。 e.g。

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

这样你就永远不会从浏览器中获取缓存的xml。 感谢。

答案 2 :(得分:0)

总是附加一个随机数来获取新的xml文件..

Atul yadav

答案 3 :(得分:0)

我同意在URL中放置一个随机参数。我只是在每次调用服务时(在结果处理程序中)递增一个变量,并将param嵌入到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
}

因此,对于每个服务调用,您可以在正结果上增加此数字。 (你也可以在故障结果上执行此操作,具体取决于你想要如何构建事物。)这将保证浏览器始终必须对数据库进行全新的非缓存调用,并检索新保存的数据你的用户界面。