我有一个用户试图找到在线人员的php页面。
有一个搜索按钮,单击其中,为数据库中的当前用户创建一个条目,然后控件进入循环,每5秒在数据库中进行一次搜索以查找是否有新条目如果找到了条目,则会向他显示合作伙伴的详细信息。
我希望如果用户在找到合作伙伴之前退出或离开页面,则必须从数据库中删除其条目。
我试图在会话变量中存储针对用户创建的'id',进行ajax调用并删除该条目,但不知何故这个概念不起作用。数据没有被删除。这是因为仍然找到用户或其他东西的循环,我无法得到它。
有谁能告诉我我的做法出了什么问题?
我正在使用的代码片段
window.onbeforeunload = function() {
funcDeleteonexit();
return "Are you sure you want to navigate away?";
}
function funcDeleteonexit(){
$.get("functions.php",{
data:"delete"
},function(data,status){
});
}
在我的functions.php中,我有
if($_GET){
if ($_GET['data']=="delete"){
echo deletefromDb();
}
}
function deletefromDb() {
$mysqli = new mysqli("localhost", "root", "", "test");
/* check connection */
if (mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$currentid = (int)$_SESSION['currentId'];
$query1 = "delete from test where id =". $currentid;
$mysqli->query($query1);
$mysqli->close();
return $currentid;
}
答案 0 :(得分:0)
如果你想在某人离开页面时完成某些事情,那么在大多数情况下,如果你想要解雇某个特定事件,这会给你带来麻烦。有些情况下浏览器无法触发事件(例如客户端崩溃等)。
因此,我建议采用不同的方法。从服务器端控制,不要依赖用户浏览器或输入。
首先,您可以在定期从浏览器中触发Ajax事件的同时轮询数据。你没有说过这个,但我认为你做的是这样的:
function yourrequest(){
$.ajax({
type: "GET",
url: "your/php/script.php",
success: function(data){
// do something, p.e. update a div
}
});
};
setInterval(yourrequest, 5000);
(请不要将此代码示例拆开,仅用于显示基础知识)。
在服务器端,您已在数据库中的某个位置拥有用户ID。向此表添加时间戳字段(称之为last_request或类似的东西)。每次向客户端发送一些数据时,请检查是否有last_request低于所需阈值的用户,并删除这些ID。无需等待特定事件。
这不需要在那里完成,你也可以做一些不同的事情,例如:每5分钟左右完成一次清理工作,这样就可以完全不干扰用户的请求。
答案 1 :(得分:-1)
我建议浏览器不要发送ajax或者中断它。 因此,尝试使您的AJAX请求同步。对于JQuery似乎将async参数设置为false
$.get("functions.php",{
data:"delete",
async : false
},function(data,status){
});