php - $_POST 使用 AJAX 调用的持久性

标签 php jquery ajax post response

我正在尝试建立一个评论系统,当用户发送评论时,它会显示在他们的屏幕上,就好像它已经存储在数据库中一样。 我的问题是:如果用户发送评论然后导航离开会发生什么 (或者最具体的是立即关闭窗口)或者他们在 ajax 发布后失去连接?

在代码方面我有 ajax({})...

然后我有代码从文本区域获取用户输入并将其添加到 div。

这意味着用户可以立即看到他们输入的评论。但我想确定即使连接丢失、窗口关闭或用户导航离开,服务器是否会获得发布信息。


问题的更多信息:

用户向服务器发送一个 1mb 值的帖子,然后在一毫秒后立即发送 他/她单击了使浏览器窗口关闭的帖子的按钮。

服务器是否接收并解析带有ignore_user_abort(true);的响应 在文件里面;帖子信息收到了吗?

如果在这种情况下是获取而不是发布有什么不同吗?

假设 website.com?myget=value

尝试连接然后立即关闭窗口,例如在浏览器窗口中, 只需在地址栏上点击它,然后立即关闭,想象一下 自动。

第 1 步转到 website.com?myget=value(不要等待任何服务器响应,只需 立即(一毫秒或脚本执行此操作所需的任何时间)完全关闭 window 。

$_GET['myget'] 会在 website.com 的 index.php 中被服务器端接收吗?

最佳答案

这是一个用户体验问题,而不是技术问题。您要做的是仅在存储新评论后才显示它。工作流程应该是这样的:

  1. 用户输入消息
  2. 用户点击“提交”按钮
  3. 系统使“提交”按钮变灰并显示一条消息, “正在发布……”
  4. 当系统可以确认消息已成功发送时 存储后,系统将删除“正在发布...”文本并显示实际的新内容 消息。

这样用户就知道在请求完成之前不要关闭浏览器或离开。


或者您可以onbeforeunload警告您的用户在关闭浏览器或离开之前等待。工作流程类似于:

Prerequisite: You have a persistent counter somewhere (cookie, local storage, hidden field, etc). When the page loads, it starts at 0.

  1. 用户输入消息
  2. 用户点击“提交”按钮
  3. 发送 AJAX 请求
  4. 计数器增加1
  5. 请求完成,你得到响应(是否成功 - 错误处理是另一个问题),将计数器减少 1

如果在任何时候,unload事件被触发,系统将检查计数器。如果大于 0,警告用户他们的请求尚未完成,他们可能会失去评论(a-la-Gmail)。

关于php - $_POST 使用 AJAX 调用的持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14023612/

相关文章:

mysql - Laravel 使用 whereIn 更新多行

php - 如何将非常相似的字符串中的方差输出到数组中?

php - Zend_Form 不渲染

javascript - 表单提交按钮/刷新页面

jquery - 如何在自动调整大小时设置日期搜索工具栏字段宽度

javascript - 从 JavaScript 对本地 SQLite 文件运行查询

php - 出于安全原因,在执行 composer 命令时已禁用 putenv

javascript - 基本 Javascript 全局范围问题

jquery - 不希望 div 的背景图像出现在表格中

javascript - SQL查询ORDER BY列应该写在​​JS代码中吗?