【问题标题】:How do I measure the progress of an ajax call? In Php with jquery/ajax如何衡量 ajax 调用的进度?在 PHP 中使用 jquery/ajax
【发布时间】:2015-12-28 20:21:38
【问题描述】:

我有一个 AJAX 调用,它正在运行一个长的 PHP 脚本,其中有 20 个不同的结果,我想显示脚本中的每个步骤何时完成。 就像这样 1/20 完成,2/20 完成,3/20 完成。

最新 29-12-2015 03:17。

我尝试通过 PHP 创建 JSON 文件 (jsonFileName_uniqueTimeStampHere.json),但是使用 PHP 创建文件所花费的时间导致 404 file not found 错误!

因为当 AJAX 调用正在运行时,它会在文件创建之前进行进度调用,我知道我无法使用 JavaScript 创建文件,但无论如何都可以创建。

jQuery AJAX 成功回调之前的文件?

在 AJAX 调用运行时显示进度信息的最佳方式是什么。

按照我现在的方式,我在服务器上保存了一个 JSON 文件,该文件会使用已完成的最新状态进行更新,但如果多个用户正在运行相同的脚本,则该状态的 JSON 文件将被覆盖。

  1. 我是否应该将每个进度的状态保存在 DB 中,然后通过多次调用获取已完成状态的 PHP 方法来接收它?
  2. 我是否应该继续使用当前使用的方法并向 JSON 文件添加一个用户 ID,以便在每次调用该文件时它都是唯一的?
  3. 我应该如何以与 Seositecheckup 相同的方式进行操作?

在 AJAX 和 PHP 方面取得进展的最佳方式是什么?

如果您需要更多信息,请告诉我。

我环顾四周,感觉不到信息或一半的信息,有找到网上已经足够我自己做这个了。

我想使用 jQuery AJAX 而不是 XMLHttpRequest,我正在寻找类似于 seositecheckup.com 的东西,当您扫描页面时,您可以在控制台中看到每个已完成功能的状态更新,并使用不同的 AJAX 完成来电。这怎么可能?

我应该忘记使用 jQuery 而是专注于纯 JavaScript 吗?

现在我有一个使用 jQuery 的设置,问题是,我使用 JSON 文件来获取结果,当多个用户请求相同的脚本时它会被覆盖,是否可以将状态存储在 db 中并使用一些唯一标识符从那里接收它?

将来我希望将脚本放入一个可以运行的队列中,当脚本结束时,它应该向用户发送一封电子邮件。

【问题讨论】:

  • 谢谢,我查看了该链接及其大约 2 年的历史并使用 XMLHttpRequest,我想以与 seositecheckup 类似的方式使用 jquery ajax。
  • jquery ajax 只是 XHR 的一个包装器
  • 我确实意识到这一点,但我不想使用纯 javascript 来执行此操作,我想使用 jquery ajax 设置来执行此操作,我希望它有意义。
  • 实际上没有任何意义。如果您知道使用 vanilla JS 完成此操作的方法,为什么您会限制自己使用一个仅因为您在其他地方使用它而使这变得困难的库?它毫无意义,但是,this answer 中似乎有一个使用 jQuery 的解决方案。基本上是一个 hack,但我猜它仍然有效。

标签: javascript php jquery json ajax


【解决方案1】:

处理可能需要很长时间的请求的 HTTP 方式是请求返回 202,并且响应的正文应包含用户可以查询结果的 URL。

#Request
POST /some/entitities
...

#Response
HTTP/1.0 202 Accepted

/jobs/{jobId}

然后用户可以轮询/jobs/{jobId},它可以返回一个数字来表示进度。你必须用这个吗?不,但如果您这样做,其他开发人员可以立即识别出正在发生的事情。

即使您不使用我推荐的方法,您也必须跟踪数据库中的工作进度,并通过单独的 AJAX 调用来了解当前进度。

【讨论】:

  • 如果我应该使用 jquery ajax 执行此操作,您将如何使用属于运行脚本的用户的唯一标识符将数据保存在数据库中。什么是创建进度唯一标识符的最佳方法,您能否给我和数据库构建示例,我有 20 个不同的结果。
  • 您可以使用 guid,您正在使用 202 将它们传回给调用者
  • 你将如何创建它,你会用 php 做还是用 javascript 在前端做?
  • @user3502250 服务器是创建作业的人,它生成作业 id,客户端调用该 URL 直到完成,此时服务器将向客户端提供最终 URL,其中可以检索资源。
  • 所以我应该只在我的类中调用一个方法来从数据库中获取状态?完成后删除表中的行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多