我正在进入 Web 开发的第二天,所以要温柔!
我正在尝试编写一个小网络应用程序,它允许用户访问一个站点并单击/点击屏幕以将一个点指向另一个屏幕。为此,我设置了一个 Django 服务器来处理数据,我使用 Javascript 来获取点击/点击位置,通过 POST 数据将其发送到服务器,然后使用 Processing.js 绘制它(我的老板很大关于处理,这实际上是对通过手机等在大屏幕上处理的交互性的测试)。
我不是网络开发人员,所以即使是这个简单的任务也很有挑战性。直到此时我都感觉很舒服。当用户加载交互网页时,他们会被分配给应用程序的任意用户 ID,这让他们可以控制他们的特定点。我希望在用户离开页面时删除该点。我计划稍后实施备份超时,但我希望首先进行即时删除以获得最佳体验,最接近预期。(我认为我们的最终目标是有一个漂亮的大屏幕运行一个简单的游戏,人们可以走过,使用屏幕上的二维码启动交互站点,然后加入游戏。当他们感到无聊时,他们只需关闭网站并从游戏屏幕中删除它们,简单)。
在我的交互页面中,我有这段代码(对糟糕的变量名表示歉意):
<body onload="load()" onbeforeunload="unload()">
<canvas id="canv" width="1000" height="1000"/>
<script type="text/jscript">
var userid;
function load() {
userid = Math.floor(Math.random()*1000) //this will of course be changed
var canv = document.getElementById('canv');
canv.addEventListener('click', onCanvasClick);
//$(window).unload(unload());
}
function onCanvasClick(event) {
var cx, cy;
var canvv = document.getElementById('canv');
canoffset = $(canvv).offset();
cx = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - Math.floor(canoffset.left);
cy = event.clientY + document.body.scrollTop + document.documentElement.scrollTop - Math.floor(canoffset.top) + 1;
cx = (((cx - 500) / 500) * 3);
cy = (((cy - 500) / 500) * 3);
var data = {
x: cx,
y: cy,
id : userid,
deleteMe : 0
};
$.post("", data);
}
function unload() {
//send remove code for this user
var data = {
x: 0,
y: 0,
id: userid,
deleteMe : 1
};
$.post("", data);
//alert("test");
}
</script>
这个 POST 数据应该被发送到 Django 服务器。从onCanvasClick
函数发送的 POST 被成功接收,并且我看到点按计划移动。unload()
但是,无论我是否使用beforeunload
orunload
事件(或者,如您所见注释掉的 JQuery unload
) ,都不会收到从函数发送的 POST 。但是,注释掉的警报仍然会触发。
我在这里想念什么?是否有一种行之有效的方法来告诉服务器用户已离开页面?