【问题标题】:how to update content automatically without reloading webpage using php/ajax?如何在不使用 php/ajax 重新加载网页的情况下自动更新内容?
【发布时间】:2015-01-24 11:58:25
【问题描述】:
我正在尝试使用 PHP 创建一个拍卖工具。我遇到的问题(我很欣赏这是一个基本问题,但我需要澄清)是我不明白如何在每个用户屏幕上自动更新“拍卖价格”,而无需他们采取任何行动或不引起完全重新加载页面。
到目前为止,我了解 Ajax 已用于执行此操作,但如果有人能指出我正确的方向或任何有用的材料。到目前为止,我的项目计划是使用 PHP 和 JavaScript,因此任何解决方案都需要与这些语言兼容。
注意:我使用的是 MySQL 数据库。
【问题讨论】:
-
-
-
-
您更多的是寻找客户端和服务器之间的双向通信,而不是 ajax 的通常目的。你最好的选择是 websockets,但实现服务器端比长轮询 ajax 复杂得多。你可以阅读:stackoverflow.com/questions/10028770/…
-
websocket 是你最好的选择,原因有很多,是的,这是一个令人生畏的过程,但你可以使用调用 pusher pusher.com 的东西,它基本上是一项为你和你做所有疯狂工作的服务只需在js & php 中添加一些代码即可将数据绑定到您将通过流式传输更新的通道/管道。
标签:
javascript
php
jquery
html
ajax
【解决方案1】:
你问的那个问题有很多可能的答案,它们可以填满一本书。
执行此操作的最简单方法是使用 setInterval() 函数和 AJAX 调用的组合每隔几秒进行一次 ajax 调用。你基本上每隔几秒就会发出一个 AJAX 请求:
setInterval(function(){
$.get( "anyChanges.php", function( data ) {
//do something with the returned data. Maybe update a table or something
});
}, 3000);
在服务器端anyChanges.php 立即返回一些数据,例如确认某些内容已更改以及新数据。
长轮询是 Google 和其他公司的做法。这与上面的示例相同。区别在于服务器端。 anyChanges.php 不会立即返回,脚本会保持连接打开,直到有一些新的更改并返回它们。如果使用长轮询,通常将间隔设置为更长,例如 30 秒。
在我看来,最好的方法是 WEB Sockets。这是一项非常新的技术。使用 Web 套接字,您可以创建到服务器的双向连接。这意味着服务器可以简单地向客户端发送数据,而不必每隔几秒就请求新数据。在 PHP 中,使用 web sockets 有点困难(或者我听说过),但你可以试一试。如果您选择 web sockets,请先尝试了解它们:
tutsplus tutorial
这个库会很有帮助:
socketo.me
【解决方案2】:
PHP/Ajax 示例:
在此示例中,您有 index.html 和 record_count.php 文件
代码如下:
index.html 包含加载record_count.php 的html 代码和javascript 调用
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh = setInterval(
function ()
{
$('#load_tweets').load('record_count.php').fadeIn("slow");
}, 10000); // refresh every 10000 milliseconds
</script>
<body>
<div id="load_tweets"> </div>
</body>
record_count.php 有 php 代码
<?php
echo "some code or variable here";
?>
您可以更改 javascript 间隔以满足您的需要
我会把博客链接留给你作为参考:9lessons
【解决方案3】:
当我制作交互式显示时,必须立即切换页面,然后我创建页面而不刷新。
我的方法是这样的:
- 我有一个 index.html,其中包含所有结构(页面)以及所有必要的 html 标签。
- javascript/typescript 从 CMS(例如 Kirby)加载 json,其中包含有关文本和图像链接的所有信息。
- 现在加载 json 时,我只需要通过显示/隐藏或创建/删除 html 元素在页面之间切换。所有数据和文本均由 javascript 加载。
有一些缺点,可以修复,例如地址栏中每个页面的链接。在这种情况下,您需要在页面切换的地址栏中添加历史管理并更改 url。