我正在尝试建立一个评论系统,当用户发送评论时,它会在屏幕上显示,就好像它已经存储在数据库中一样。 我的问题是:如果用户发送评论然后导航,会发生什么 (或者最特别是立即关闭窗口)或者在ajax发布后他们失去联系?
在代码方面,我有ajax({})
...
然后我有代码从textarea获取用户输入并将其添加到div。
这意味着用户可以即时查看他们输入的评论。但我想确定服务器是否会获得帖子信息,即使连接丢失,窗口关闭或用户导航离开。
有关该问题的更多信息:
用户使用1mb的值向服务器发送帖子,然后在1毫秒后发送 他/她点击了关闭浏览器窗口的帖子。
服务器是否使用ignore_user_abort(true);
接收并解析响应
在文件里面;收到的帖子信息是什么?
如果在这种情况下获得而不是发布任何差异?
假设website.com?myget=value
尝试连接然后立即关闭窗口,例如,在浏览器窗口上, 只是在地址栏上点击然后立即关闭,想象一下 自动。
步骤1转到website.com?myget=value
(不要等待任何服务器响应
直接(一毫秒或脚本所做的任何事情)完全关闭
窗口。
将$_GET['myget']
收到服务器端在website.com的index.php?
答案 0 :(得分:1)
这是一个用户体验问题,而不是技术问题。您要做的是仅在存储新注释后显示它。工作流程应该是这样的:
这样,用户就知道在请求完成之前不要关闭浏览器或导航。
或者,您可以onbeforeunload
警告用户在关闭浏览器或导航之前等待。工作流程如下:
先决条件:您在某处有一个持久计数器(cookie,本地存储,隐藏字段等)。页面加载时,它从 0 开始。
如果在任何时候触发unload
事件,系统将检查计数器。如果大于 0 ,则警告用户他们的请求尚未完成,并且他们可能会放弃评论(a-la-Gmail)。
答案 1 :(得分:1)
将加上我的五美分。使用ajax({})
,您将要求浏览器开始与您的服务器通信。它需要一些时间来建立连接(ping时间)并将数据发送到服务器。这两个部分都需要一些时间来完成。为了让PHP开始执行,浏览器必须发送它必须发送的所有数据。无论是POST还是GET。如果用户将破坏发送程序(浏览器崩溃,标签关闭,计算机关闭)PHP甚至不会启动。例如,您可以尝试发送一些大文件,并在启动PHP脚本时查看调试器 - 仅在文件完全传送之后(您甚至可以在上传文件之前关闭浏览器并查看您的脚本是否完全执行) 。只有在将所有数据传递到服务器并在数据传递之前忽略连接之后才启动PHP执行是有意义的。否则可能存在数据损坏的问题。没有人想要那样。另外,假设PHP在所有内容都传递到服务器之前就已启动:您永远不会确定$_POST["something"]
不可用,因为它从未被用户输入或其数据尚未传递。
如果您使用常规表单提交或XMLHTTPRequest,则没有区别。在这两种情况下,浏览器都需要一些时间与服务器建立连接并将数据传递给它。
答案 2 :(得分:0)
在大多数情况下,您对服务器执行的任何操作都将继续执行,直到服务器上运行的PHP尝试将结果输出回浏览器为止。只有在这一点上,PHP才会检查连接是否仍然存在,并根据用户中止设置做任何应该做的事情。因此,如果您希望收到帖子,更新数据库条目,然后回显某种成功消息,只要在查询数据库之前没有输出任何输出,数据库活动就应该继续。
POST与GET对此行为没有任何区别。