2011-04-17 35 views
2

我正在使用Flex 4.有一个由多行组成的表的PHP后端和mysql数据库。Flex json自动udpate数据网格

我从结果事件中取出原始数据并使用JSON对其进行解码。然后我将数据转储到一个ArrayCollection中,用作我的数据网格的数据提供者。

我的问题是如何判断某人何时向mysql表中插入新行,以便我可以自动刷新我的ArrayCollection,从而一次无缝更新我的datagrid中的一个元素?现在,这只是一次电话,连接已关闭。如果有人在数据库中插入新行,我的程序无法识别,除非我重新启动它。我想自动更新AC每当一个新行插入到MySQL数据库。有什么办法可以“听”这种改变?

谢谢!

+0

嗨迈克,你试图做的事情叫做彗星,或者服务器推送。到目前为止,很少有服务器支持这个。请参阅这个请求来知道如何在Apache中使用comet.http:// stackoverflow。 com/questions/603201/using-comet-with-php.Once通过设置,您将需要创建一个flex彗星桥。如果您有兴趣继续使用此解决方案,请回复,我会为您提供flex彗星桥的代码,正如我在某些应用程序中使用它的,但后端是用java编写的。 – Neeraj 2011-04-18 10:27:45

回答

0

不,没有自动的方法来做到这一点。但是您可以定期“ping”您的服务器并索要新的行。使用

setInterval(myFunctionName, timeToWaitBetweenEachCallInMilliseconds); 

要做到这一点。

0

啊,你已经偶然发现了网络领域这个古老的问题:轮询还是推送?

轮询表示您每隔几秒钟或几分钟ping服务器以检查是否有任何数据已更改。如果有,您的服务器将向您发送在您的前端进行适当更新的新更改数据。关于如何解释需要更新哪一部分数据的'协议'完全取决于您,因为没有真正的标准(因为数据本身可能会因系统而异)。现在轮询仍然在许多不需要关键的“实时”信息的系统中使用,并且因为它不需要一致的连接,所以对于像手机这样的有线互联网特别有用。另外,一切都是HTTP请求,所以没有企业防火墙可以阻止它。

推送意味着您的前端和后端之间的连接通常会超过RTMPT(HTTP UDP协议以规避企业防火墙,但不是100%)。如果您需要实时数据(如说财务数据)以便快速交付给您,那将会非常好。但是,用户需要一致的互联网连接,并且您需要有一台能够处理连接和会话管理量的服务器。通常,大多数人最终会使用Java,因为有很多库可以处理推送(BlazeDS,GRaniteDS,Livecycle,Wowza等)。

由于您使用的是PHP,因此您可能需要使用轮询作为解决方案,但需要自行实施。我相信有些图书馆可以帮助你。