2012-01-31 71 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秒将它们发送到服务器。