我正在尝试建立一个评论系统,当用户发送评论时,它会显示在他们的屏幕上,就好像它已经存储在数据库中一样。 我的问题是:如果用户发送评论然后导航离开会发生什么 (或者最具体的是立即关闭窗口)或者他们在 ajax 发布后失去连接?
在代码方面我有 ajax({})
...
然后我有代码从文本区域获取用户输入并将其添加到 div。
这意味着用户可以立即看到他们输入的评论。但我想确定即使连接丢失、窗口关闭或用户导航离开,服务器是否会获得发布信息。
问题的更多信息:
用户向服务器发送一个 1mb 值的帖子,然后在一毫秒后立即发送 他/她单击了使浏览器窗口关闭的帖子的按钮。
服务器是否接收并解析带有ignore_user_abort(true);
的响应
在文件里面;帖子信息收到了吗?
如果在这种情况下是获取而不是发布有什么不同吗?
假设 website.com?myget=value
尝试连接然后立即关闭窗口,例如在浏览器窗口中, 只需在地址栏上点击它,然后立即关闭,想象一下 自动。
第 1 步转到 website.com?myget=value
(不要等待任何服务器响应,只需
立即(一毫秒或脚本执行此操作所需的任何时间)完全关闭
window 。
$_GET['myget']
会在 website.com 的 index.php 中被服务器端接收吗?
最佳答案
这是一个用户体验问题,而不是技术问题。您要做的是仅在存储新评论后才显示它。工作流程应该是这样的:
- 用户输入消息
- 用户点击“提交”按钮
- 系统使“提交”按钮变灰并显示一条消息, “正在发布……”
- 当系统可以确认消息已成功发送时 存储后,系统将删除“正在发布...”文本并显示实际的新内容 消息。
这样用户就知道在请求完成之前不要关闭浏览器或离开。
或者您可以onbeforeunload
警告您的用户在关闭浏览器或离开之前等待。工作流程类似于:
Prerequisite: You have a persistent counter somewhere (cookie, local storage, hidden field, etc). When the page loads, it starts at 0.
- 用户输入消息
- 用户点击“提交”按钮
- 发送 AJAX 请求
- 计数器增加1
- 请求完成,你得到响应(是否成功 - 错误处理是另一个问题),将计数器减少 1
如果在任何时候,unload
事件被触发,系统将检查计数器。如果大于 0,警告用户他们的请求尚未完成,他们可能会失去评论(a-la-Gmail)。
关于php - $_POST 使用 AJAX 调用的持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14023612/