php - 如何知道 jquery $.get ajax 调用何时完成?

标签 php jquery mysql ajax get

我有一个 php/mysql/jquery 网络应用程序,它对各种 API 进行 13 个 ajax 查询并将结果存储在数据库表中。我为每个结果分配一个分数,当所有结果都完成后,我想显示一个“总分”。

我的问题是知道什么时候所有的 ajax 查询都完成了,所有的结果都准备好了。

这是现有的工作流程:

  1. 用户在查询框中输入数据并点击提交。
  2. 页面重新加载并将“扫描 ID”插入到“scan_index”表中。
  3. Page 然后为 13 个查询中的每一个执行一个 jquery $.get 函数(所有查询都使用相同的 javascript 函数来执行它们的工作)。
  4. 返回每个结果时,使用先前插入的“扫描 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/

相关文章:

php - Laravel 4 对 LEFT() mysql 字符串函数使用查询生成器

php - 使用 PHP,尝试从 MySQL 数据库中选择一个特定的查询会给我所有的东西

jQuery 验证器在单元测试中不起作用

php - 使用 php 在其他站点上运行 javascript

php - 一个变量的多个字符串

javascript - Electron - Jquery 不工作

javascript - 初始化时 Owl-Carousel 超大图像

mysql - 奇怪的 SQL 查询行为

php - Codeigniter:将 form_input 插入 sql 表

php - 如何验证来自数据库的多个输入?