循环 jquery ajax 调用时

2024-02-04

我想使用 while 循环控制对控制器的 ajax 调用数量。

var counter = 0;
$('#filter-form').submit(function (event) {
    event.preventDefault();

    alert("counter init = " + counter)
    while (counter < 10) {
        (function () {
            $.ajax({
                url: '/algorithm',
                method: 'GET',
                data: $('#filter-form').serialize() + "&counter=" + counter,
                success: function (data) {
                    alert("The data is " + data);
                    setCounter(parseInt(data))
                },
                error: function (xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message);
                }
            });
        })();
    }
    alert("counter end = " + counter)
});

function setCounter(data) {
    counter = data
}

控制器:

@RequestMapping(value = "/algorithm")
@ResponseBody
public String test(@RequestParam Map<String, String> allRequestParam) {

    int counter = Integer.parseInt(allRequestParam.get("counter"));
    counter++;

    return Integer.toString(counter);
}

控制器基本上只是增加计数器并返回它,并且在 ajax 成功时:它将把全局计数器设置为该数字。

当我这样做时,页面就会冻结,我无法单击任何内容。我将 ajax 调用放在一个函数中以进行范围界定,但它仍然不起作用。当我使用 for 循环时,ajax 似乎不会调用,因为我没有收到任何成功或错误警报。


它不起作用的原因很简单:$.ajax调用是异步的。

举个例子:

$(function() {
  var t = 1;
  console.log("Hey, the ajax will start! t's value: " + t);
  $.ajax({
      url: 'www.google.com.br',
      method: 'GET',
      success: function (data) {
          t++;
          console.log("We've received an answer! t's (incremented) value: " + t);
      },
      error: function (xhr, status, error) {
          t++;
          console.log("We've received an error! t's (incremented) value: " + t);
      }
  });
  console.log("Hey, the ajax just ended.... Not really. t's value: " + t);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

输出是:

Hey, the ajax will start! t's value: 1
Hey, the ajax just ended.... Not really. t's value: 1
We've received an error! t's (incremented) value: 2

那是因为$.ajax呼叫是非阻塞,因此在程序完成之前不会阻塞程序,允许程序继续执行下一行代码并继续在后台运行ajax任务。

这是 SO 中经常出现的问题,因此我不会在这里再次提供解决方案,而是请您阅读有关问题的更多信息:

  • 如何从异步调用返回响应? https://stackoverflow.com/q/14220321/3136474
  • 如何让 jQuery 执行同步而不是异步 Ajax 请求? https://stackoverflow.com/q/133310/3136474
  • Ajax 中的异步意味着什么? https://stackoverflow.com/q/3393751/3136474
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

循环 jquery ajax 调用时 的相关文章

随机推荐

  • 当关联计数更改时强制更新 NSFetchedResultsController

    我有一个 NSFetchedResultsController 它在表视图中显示项目列表 包括关联实体的计数 当为此关联添加对象时 使用 addXXXObject 不会调用回调来通知我的控制器更新 如何接收对象被添加到父实体的 NSSet
  • Java Beans Binding 的状态如何?

    我发现一篇旧文章http www artima com lejava articles beans binding html http www artima com lejava articles beans binding html以及一
  • 针对单个客户端请求并行多个数据库查询

    为了完成用户的某些请求 在我的应用程序中 我从单个方法发出多个数据库查询 但它们当前正在按顺序执行 因此应用程序被阻止 直到它收到前一个查询的响应 数据 然后继续下一个查询 这不是我很喜欢的事情 我想发出并行查询 另外 在发出查询之后 我想
  • 使用 ffmpeg 在同一张图像上使用两次淡入/淡出

    我使用此命令在流开始 5 秒后淡入徽标 并在 25 秒后淡出 如下所示 ffmpeg re i test mp4 ignore loop 0 i logo gif filter complex 1 v fade in st 5 d 1 al
  • 在 QML 中截取特定项目的屏幕截图的方法是什么?

    我知道如何在 QML 中截取整个窗口的屏幕截图 https stackoverflow com questions 33165733 qquickwindowgrabwindow scene graph already in use lq
  • “onclick”不适用于具有 svg-image 的对象元素[重复]

    这个问题在这里已经有答案了 当我使用onclick的属性object html 文档中的元素 它不响应点击 在我的文档中 我有一个 svg 图像并将其存储在object element 因为图像中存在一些动画 仅使用img tag 在下面的
  • Silverlight:画布溢出

    我创建了一个 Canvas 并在其中放置了一个 StackPanel StackPanel 是水平的 它接受缩略图列表 画布有固定的大小 当我放置的缩略图数量超过 Canvas 宽度可以容纳的数量时 StackPanel 应该会从 Canv
  • 如何在运行时向角色添加动画控制器?

    我在 Assets Resources System PLController 中有一个 Animator 控制器 我必须在运行时使用脚本添加它 如何实现这一点 使用Unity 5 5 3 0f4 PLController 动画控制器 首先
  • CMake 中的 CMAKE_SOURCE_DIR 和 PROJECT_SOURCE_DIR 是否相同?

    这一页 https gitlab kitware com cmake community wikis doc cmake Useful Variables包含 CMake 已经为我们定义的变量的良好摘要 我觉得有些变量是相同的 举个例子CM
  • 即使任务启动后,AsyncResult(task_id)也会返回“PENDING”状态

    在项目中 我尝试轮询长时间运行的任务的task state并更新其运行状态 它在开发中有效 但当我将项目移动到生产服务器上时它不起作用 即使我可以看到任务在花上开始 我仍然收到 待处理 消息 但是 当任务完成时 当task state SU
  • 省略 Access 报告最后一页的页眉?

    如何删除 Access 报告最后一页上的标题 将组添加到报告中 根据表达式进行分组 True 这将创建一个包含报告中所有记录的组 为该组提供组标题 然后将列标题标签从页标题移动到组标题 在组标题的属性中 设置Repeat Section t
  • Excel XY 图表(散点图)数据标签无重叠

    So I ve been working on this for the past week Although it can t do miracles I can say I ve got a pretty good result I j
  • API 10 编译错误

    我遵循developers android com 上的基本教程 并创建了名为DisplayMessageActivity 的活动 这是一个空白活动 其中给出了教程中所示的所有规范 仅供参考 我使用 Min SDK API 8 Target
  • 使用 pandas 从 Google Cloud Storage 读取 CSV 文件

    我正在尝试将一堆 CSV 文件从 Google Cloud Storage 读取到 pandas 数据帧中 如中所述将 csv 从 Google Cloud 存储读取到 pandas 数据框 https stackoverflow com
  • LINQ 和实体框架 Code First 中的 SQL 子查询结果

    我想要进行一个查询 该查询将返回我的实体以及它们的一些关联实体 例如 select select COUNT from Forms where Contact Id Contacts Id as FormsCount from Contac
  • 基于 cocos2d-box2d 的项目中出现“'uniqueIdentifier' is deprecated”警告

    我基于cocos2d box2d创建一个新项目 两个文件中总是有4个警告 一个是CLScoreServerPost m 代码有警告如下 self addValue UIDevice currentDevice uniqueIdentifie
  • 防止 iCloud 备份文件夹

    我最近因 NSLibraryDirectory 将错误类型的数据备份到 iCloud 而被拒绝 我试图阻止整个目录备份到 iCloud 因为该目录除了下载的内容外不包含任何内容 AppDelegate m 中的这段代码可以工作吗 NSStr
  • 获取当前ViewModel MvvmCross

    奇怪的是 我在互联网上没有找到这个非常简单的问题的直接答案 如何确定当前处于活动状态ViewModel in MvvmCross运行 是否可以 如果不是 为什么我不应该这样做 正如我最近了解到的 哪个 ViewModel 是 活动的 取决于
  • 在缩小的 Angular javascript 中调试未知提供者

    我很难确定我的角度应用程序中的哪些方法会导致错误 Uncaught Error injector unpr Unknown provider nProvider lt n 仅当 JavaScript 被 ASP Net 捆绑并缩小后才会发生
  • 循环 jquery ajax 调用时

    我想使用 while 循环控制对控制器的 ajax 调用数量 var counter 0 filter form submit function event event preventDefault alert counter init c