单击按钮更新文本文件
我想创建一个有按钮的网站,当你点击它时,它会改变一些文字(说真或假)。 当用户单击按钮时,文本必须更改,但不仅仅针对一个用户,对于站点上的每个用户。
我试图这样做的方式是我有一个文本文件,到目前为止我所有的都是页面上的一些文本,每500毫秒刷新一次,以显示文本文件中的任何内容。
所以现在我需要做的就是在单击按钮时更新文本文件。 我能做到这一点的最好方法是什么? (我希望能够按下托管该站点的计算机上的按钮或访问该站点的另一台计算机。)
谢谢,Fjpackard。
更新
index.php文件:
$("document").ready(function(){ $("button").remove(); setInterval(function(){ $("#theDiv").load("file.txt"); },500); var deviceAgent = navigator.userAgent.toLowerCase(); var agentID = deviceAgent.match(/(iphone|ipod|ipad)/); if (agentID) { // mobile code here } else { $("body").prepend(""); $("#theDiv").css("visibility","none"); $("button").click(function(){ myClick(); }); } }); function myClick() { var url = ''; //put the url for the php value = $.post("", {}).done( function(data) { $('#theDiv').html(data); } ); }
script.php的:
您将在服务器上读取名为“file.txt”的文件。
假设您有这段代码每500毫秒刷新一次页面:
所以现在我需要做的就是在单击按钮时更新文本文件。 我能做到这一点的最好方法是什么? (我希望能够按下托管该站点的计算机上的按钮或访问该站点的另一台计算机。)
script.php的:
这是更新文件的服务器端代码。
的index.php
在这里,我们正在制作一个ajax请求,以便从按钮的事件处理程序中执行该代码。
注意 :代码$.post(url, {})
将发出请求。 在这种情况下,我们不使用done
继续(将在服务器发送其响应时执行)以避免与计时器的竞争条件。
到目前为止,您一直在阅读file.txt
。 您可以利用script.php
来提供当前值。 这将在GET请求而不是POST中完成。
script.php的:
index.php文件:
如您所见,我们现在使用script.php
进行读取和写入。 这有助于在服务器上进行检查。 例如:可能并非所有用户都可以更新值或检索它。
注意 :保护程序存在竞争条件。 如果两个客户端“在同一时间”在服务器上发出请求,则它们对文件的更新将重叠,结果看起来只发生一次更新(而不是两次)。
观察 :
- 您可能希望在服务器上执行其他检查,例如validation用户会话。 也许不是每个人都能够更新状态。
- 如果要对相同的PHP代码执行更多操作,可能需要在POST请求上发送变量。 在这种情况下,我们没有这样做(我们只发送
{}
)。
还要考虑:
- 使用Web套接字提供更通用的机制来将通知推送到客户端。 有一些库,请参阅问题是否可以使用Web套接字的本机PHP支持? 提出一些替代方案的地方。
- 使用存储格式(例如ini,json,xml …)将提供在同一文件中存储更多信息的function。
- 使用数据库进行存储。 数据库将解决服务器上的竞争条件,并提供存储更复杂数据的方法。 数据库引擎不需要是MySQL …实际上,对于这种使用,基于文档的数据库可能是更好的想法(大多数它们通常被称为NoSQL,尽管其中一些实际上支持SQL)。
单击该按钮可以使用jQuery或简单的javascript创建一个Ajax请求。 哪个会更新该文本文件。
如何在jQuery中创建Ajax请求: http : //api.jquery.com/jquery.ajax
Iinjoy