当前位置: 首页 > 知识库问答 >
问题:

暂停函数执行流,直到ajax请求完成

郑锋
2023-03-14

我似乎遇到了典型的“异步问题”,无法解决。

我有一个引导表单向导,这只是一个即兴的标签/幻灯片类似的东西。我所有的“步骤”都是在各自的标签/幻灯片内的表格。

它有一组下一个/上一个按钮可以在幻灯片周围导航。并且在移动到下一张幻灯片之前,它提供了一个函数回调。在其中(回调),我正在“客户端验证”当前幻灯片中的表单,如果它被验证了,那么我将使用Ajax提交表单。一旦我从服务器得到响应,我就决定是返回true(继续下一张幻灯片)还是返回false(停止导航到下一张幻灯片)。

我已经调查了..

  • 使用回调,但它不会阻止插件继续下一张幻灯片,而下一张幻灯片是一条硬编码的成功消息,所以当我们等待ajax响应时,向导已经移动到了下一张幻灯片。
  • 使用Async:false,但这会疯狂地挂起浏览器(按设计),直到请求完成,所以不要挂起,这正是我想要的。

我的代码如下所示。

JS.

  jQuery('#progressWizard').bootstrapWizard({
            'nextSelector': '.next',
            'previousSelector': '.previous',
            onNext: function (tab, navigation, index) {
                if (index == 1) { // Here I am deciding which code to execute based on the current slide/tab (index)
                    if (jQuery("#paymentstep1").data('bValidator').validate()) {
                        var data = new FormData(jQuery('#paymentstep1')[0]);
                        jQuery("#cgloader").fadeIn();
                        var success = false;
                        jQuery.ajax({
                            type: "post",
                            async: false,
                            contentType: false,
                            processData: false,
                            url: "xyz.php",
                            dataType: "json",
                            data: data,
                            success: function (r) {

                              return r;
                            }
                          });
                        }....

共有1个答案

郎聪
2023-03-14

onnext的文档如下:

单击下一步按钮时触发(返回false以禁止移动到下一步)

因此,只需从处理程序返回false即可。在AJAX success回调中,调用next进入下一张幻灯片。

var requestCompleted = false;
jQuery('#progressWizard').bootstrapWizard({
  'nextSelector': '.next',
  'previousSelector': '.previous',
  onNext: function (tab, navigation, index) {
    if (index == 1) { // Here I am deciding which code to execute based on the current slide/tab (index)
      if (jQuery("#paymentstep1").data('bValidator').validate()) {
        if(!requestCompleted) {
          var data = new FormData(jQuery('#paymentstep1')[0]);
          jQuery("#cgloader").fadeIn();
          var success = false;
          jQuery.ajax({
              type: "post",
              url: "xyz.php",
              data: data,
              // ...
              success: function (r) {
                requestCompleted = true;
                jQuery('#progressWizard').bootstrapWizard('next');
                return r;
              }
            });
          return false;
        }
      }
    }
  });
 类似资料:
  • 本文向大家介绍请写一个sleep(暂停)函数相关面试题,主要包含被问及请写一个sleep(暂停)函数时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我有该代码: 它可以很好地上传图像,但是问题是我找不到一种逐一上传图像的方法,我试图将 async 选项 设置为false, 但是它冻结了网络浏览器,直到所有图像都被上传为止,这不是我所需要的。想要,我想以某种方式模拟此 “ async:false” 选项以执行相同的操作,但不冻结Web浏览器。 这该怎么做 ? 问题答案: 您可以创建一个Promise数组,以便在所有Promise都解

  • #include <stdio.h> int global = 1; int func(void) { return (++global); } int main(void) { printf("%d\n", global); return 0; } 技巧 使用gdb调试程序时,可以使用“call”或“print”命令直接调用函数执行。以上面程序为例: (gdb)

  • 问题内容: 我过去曾经做过一些jQuery,但是我完全坚持了这一点。我了解使用同步ajax调用的优缺点,但是在这里将是必需的。 远程页面已加载(由firebug控制),但未显示任何返回信息。 我应该采取什么措施才能使函数正确返回? 问题答案: 在发出同步请求时,应该 范例-http://api.jquery.com/jQuery.ajax/#example-3 请注意: 设置异步属性设置为fals

  • 问题内容: 但是我的问题是不对的: 我正在执行许多ajax请求,并将它们保存在数组中: 正如相关问题所表明的那样,$ .when方法 按顺序 接受 一些对象,但是在这里我要 列出它们的清单 。 我在http://api.jquery.com/jQuery.when/#jQuery-when- deferreds中 阅读了文档,但是该方法似乎不支持这种情况(将to 列表传递给函数) 怎么会这样?请帮

  • 问题内容: 我希望for in循环向Firebase发送一堆网络请求,然后在该方法完成执行后将数据传递给新的视图控制器。这是我的代码: 我有几个问题。首先,如何等待for循环完成并且所有网络请求完成?我无法修改observeSingleEventOfType函数,它是firebase SDK的一部分。另外,我是否会尝试通过for循环的不同迭代(有意义的希望)访问datesArray来创建某种竞争条