数据更改后如何更新UI?

时间:2012-02-29 10:06:56

标签: php javascript xml events data-binding

我有一系列XML文件,可以由用户检索,编辑和保存。我的目的是允许多个用户同时编辑这些文件。这些XML文件的许多部分与浏览器UI中显示的内容相关,例如显示<name>My title</name>节点并可以进行编辑。

我使用的技术是Javascript,PHP和包含对其他XML文件的引用的主XML文件(可以在UI中编辑主文件和引用文件)。服务器启用了WebDAV,并且通过YUI3的io模块使用WebDAV方法来处理检索,保存,收集移动等。

如何根据已编辑和保存的XML文件的内容更新使用这些资源的UI?

我知道我可能会运行setTimeouts以及检查更新的内容,但只有在数据发生变化时才能让UI响应更直观。

喝彩!

1 个答案:

答案 0 :(得分:3)

您所描述的功能类似于称为服务器推送的技术。对于Web应用程序而言,您要求做的是一个非常棘手的事情(特别是对于PHP,它是围绕请求服务和脚本终止的想法构建的)。

HTML5正在引入诸如websockets之类的技术来维持与服务器的持久连接,你可以将websockets视为一种解决方案,但它是一种全新的技术,我认为规范甚至还没有最终确定,所以它只会在最新版本的浏览器中实现。

您已经提到了AJAX轮询(由setInterval驱动),但您也注意到它存在问题。你是对的,当然,本地数据可能在民意调查之间的间隔中变得陈旧,并且你将在服务器和任何开放客户端之间产生大量流量。

另一种选择是所谓的“长轮询”。这个想法是客户端启动与服务器的AJAX会话。在服务器上,客户端调用的脚本基本上只是坐在那里等待改变的东西。当它发生时,服务器通过发送JSON / XML /任何响应并关闭AJAX会话来通知客户端。当客户端收到响应时,它会处理响应并启动新的AJAX连接以等待另一个服务器响应。

这种方法几乎是即时的,因为数据一旦可用就会被推送到客户端。但是,它也意味着许多与服务器的开放连接,这可能会使服务器承受很大的负担。此外,由于构建语言的请求 - 响应模型,PHP脚本实际上并不意味着长时间运行或休眠。有可能,但可能不建议遵循这种方法。

How do I implement basic "Long Polling"?有一些长轮询技术的例子。

祝你好运!