2012-01-31 90 views
1

我做了一個短期遊戲,其中人們給出了順序提出的問題的答案,並且他們的分數存儲在用正確答案更新的變量中(即 var Score = 0; function ScoreUpdate {if (event.keyCode == correctAnswer) {Score = Score +1;}})。最後,調用JavaScript函數將這些變量放入一個表單中,隨後將其「POST」到一個頁面,然後將所有內容添加到MySQL數據庫中。表格提交窗口關閉

問題是,有些人會中途停下來,只需關閉窗口/選項卡,導致沒有提交任何分數(因爲將所有變量放入表單並提交它的JavaScript函數未激活)。因此,我正在尋找一種方法,可以在用戶關閉窗口時自動激活保存分數的功能,提交表單並上傳到數據庫。這涉及到PHP和JS,因此我想知道是否所有這些在一個事件中甚至是可能的? (即window.onbeforeunload?)

我試過這個解決方案:https://stackoverflow.com/a/1632004/1092247,但它不包括自動錶單提交(它甚至不提供對我來說一般的工作,因爲它甚至在提交表單時仍會提示) 。

正如你所看到的,我在這裏比較新,遠沒有高級的JS和PHP知識。任何幫助將非常感謝! :)

+1

我會建議在每個答案上提交數據給服務器,而不是在本地更新結果,然後在測驗結束時提交。這樣,如果他們在測驗中退出,您至少可以保存一些結果 – 2012-01-31 16:07:40

回答

2

如果用戶關閉窗口,則無法提交表單。你唯一能做的就是要求確認(即「你真的想關閉窗戶嗎?」)。

不幸的是沒有辦法解決它。 JavaScript不會允許你這樣做。

1

如果你真的想保存所有這些中間結果,然後在每個回答問題後發送它們。

您可能不得不介紹某種會話,以便逐漸在傳入的單個答案中在服務器上創建完整結果。

雖然這會增加服務器的負載。

您可能處於這兩個極端之間的某處(中間結果丟失< ===>服務器負載過高)。例如,仍然在某處積累答案,並每隔N秒將它們發送到服務器。