Web開発の2日目に入りますので、優しくしてください。
ユーザーがサイトにアクセスし、画面をクリック/タップして別の画面にドットを表示できるようにする小さなWebアプリをコーディングしようとしています。これを行うために、データを処理するDjangoサーバーをセットアップしました。Javascriptを使用してクリック/タップ位置を取得し、POSTデータを介してサーバーに送信し、Processing.jsを使用して描画します(上司は大きいです)処理について、これは実際には携帯電話などを介した大画面での処理との対話性のテストです)。
私はWeb開発者ではないので、この単純なタスクでさえかなりの挑戦でした。これまではかなり気持ち良かったです。ユーザーがインタラクションWebページをロードすると、アプリの任意のユーザーIDが割り当てられ、特定のドットを制御できるようになります。ユーザーがページを離れるときにそのドットを削除したい。後でバックアップタイムアウトを実装する予定ですが、期待に最も近い最高のエクスペリエンスを実現するために、最初にインスタント削除を実行したいと思います。(私たちの最終目標は、人々が通りかかって、画面上のQRコードを使用してインタラクションサイトを起動し、ゲームに参加できる、シンプルなゲームを実行する素敵な大画面を作成することです。退屈したら、閉じるだけです。サイトとそれはゲーム画面からそれらを削除します、簡単です)。
私のインタラクションページには、次のコードがあります(変数名が不十分な場合はお詫びします)。
<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サーバーに送信されることになっています。関数から送信されたPOSTonCanvasClick
が正常に受信され、ドットが計画どおりに移動しているのがわかります。ただし、 orイベント(またはコメントアウトされているように、JQuery )を使用しても、関数から送信されたPOSTunload()
は受信されません。ただし、コメントアウトされたアラートは引き続き発生します。beforeunload
unload
unload
ここで何が欠けていますか?ユーザーがページを離れたことをサーバーに伝えるための実証済みの方法はありますか?