gpt4 book ai didi

php - 无需重新加载页面的通知(如 facebook 或 google plus 通知)

转载 作者:可可西里 更新时间:2023-11-01 12:37:36 25 4
gpt4 key购买 nike

将 Facebook 中的通知发送到仪表板的理想机制是什么?我认为最好的方法是每 5 秒对 php 页面执行一次 Ajax 调用并检索通知。

有没有更好的方法来进行类似的更改?

它也应该适用于所有移动浏览器。

我是这样做的,

在 jquery 中使用 $.post 无需刷新页面即可获取数据。

$.post("page.php",{"act":1},function(data){
$("#id").html(data);
});
in page.php write your query

编辑 1

引用了一些网上的笔记和实时运行后,我写了一个这样的函数。

var TimeStamp = null;
function waitForMsg() {
$.ajax({
type: "GET",
url: "getData.php?timestamp=" + TimeStamp,
async: true,
cache: false,
timeout: 50000, /* Timeout in ms */
// data: "TimeStamp=" + TimeStamp,
success: function( data ) {
var json = eval('(' + data + ')');

if ( json['msg'] != "" ) {
alert( json['msg'] );
}
TimeStamp = json['timestamp'];

setTimeout(
'waitForMsg()', /* Request next message */
1000 /* ..after 1 seconds */
);
},
error: function( XMLHttpRequest, textStatus, errorThrown ) {
alert("error:" + textStatus + "(" + errorThrown + ")");
setTimeout(
'waitForMsg()', /* Try again after.. */
"15000"); /* milliseconds (15seconds) */
},
});
}
;

// calling after dom is ready
$(document).ready(function() {
waitForMsg();
});

PHP 文件是,

<?php
$filename = dirname(__FILE__).'/data.txt';
$lastmodif = isset( $_GET['timestamp'] ) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime( $filename );

while ( $currentmodif <= $lastmodif ) {
usleep( 10000 );
clearstatcache();
$currentmodif = filemtime($filename);
}

$response = array();
$response['msg'] = file_get_contents( $filename );
$response['timestamp'] = $currentmodif;
echo json_encode($response);

编辑 2

一切正常,但当 data.txt 文件没有发生任何变化时,我会在 50 秒内收到类似这样的错误消息。

错误:超时(超时)

如何预防?

编号:Javascript Variable Scope

最佳答案

据我所知,基本上有两种方法可以做到这一点:轮询和 websockets。轮询要么每隔一段时间发出许多请求,要么有一个浏览器和服务器知道很长的很长的请求(也称为长轮询)。然后是网络套接字。我已经有一段时间没有进入 PHP 领域了,但最后我检查了那里并不真正支持 websockets。它可能已经改变了。在 Node 世界中,socket.io 是一个很好的解决方案,它使用 websockets 和长轮询作为备份。

快速搜索找到了 websockets 和 php: http://socketo.me/docs/

关于php - 无需重新加载页面的通知(如 facebook 或 google plus 通知),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com