我有一个 php/mysql/jquery 网络应用程序,它对各种 API 进行 13 个 ajax 查询并将结果存储在数据库表中。我为每个结果分配一个分数,当所有结果都完成后,我想显示一个“总分”。
我的问题是知道什么时候所有的 ajax 查询都完成了,所有的结果都准备好了。
这是现有的工作流程:
- 用户在查询框中输入数据并点击提交。
- 页面重新加载并将“扫描 ID”插入到“scan_index”表中。
- Page 然后为 13 个查询中的每一个执行一个 jquery $.get 函数(所有查询都使用相同的 javascript 函数来执行它们的工作)。
- 返回每个结果时,使用先前插入的“扫描 ID”将结果插入到“扫描”表中,以便与正确的扫描相关联。结果还会连同该结果的分数一起显示给用户。
此时我要做的是使用 scan_id 值检索扫描表中的所有结果,然后汇总分数并将其显示给用户。
但我的问题是知道何时开始查询以检索所有总数。任何给定的查询在完成(或失败)之前最多可能需要 10 秒(我预定义的超时值),但它们通常最多只需要大约 3 秒即可完成。
那么,在不知道查询何时完成的情况下,如何知道所有查询何时完成?
最佳答案
听起来您缺少的关键信息是 $.get 的回调功能。您可以指定一个函数作为第二个或第三个参数,该函数将在请求完成时触发
$.get('http://example.com/data', {'foo':'bar'}, function(resonseData){
//code here will be called when the ajax call has completed
})
因此,您需要在某处设置一个计数器变量,每次发出请求时该变量都会递增 1,然后在回调中将该值递减 1。
然后,在您发出最终 get 请求后,使用 setInterval 设置一个观察器,该观察器将定期(比如每秒一次)检查计数器是否为零。如果是,则您已完成所有请求。您或许可以将此检查添加到 $.get 回调本身,但这似乎容易受到计时问题的影响。
这是基本的解决方案,但它可以很容易地抽象成更健壮/优雅的排队解决方案。
关于php - 如何知道 jquery $.get ajax 调用何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580099/