【问题标题】:Jquery - I Need One Function to Run Before Another (not at same time)Jquery - 我需要一个函数在另一个函数之前运行(不是同时)
【发布时间】:2014-04-01 17:44:00
【问题描述】:

我有两个 jquery 函数,我想在提交表单时运行它们。我需要一个函数在下一个函数开始之前运行并完成。第一个函数运行 ajax 来检查数据库,然后返回一个值。在第一个函数完全完成(ajax)之前,我不会让第二个函数运行。我知道js是异步的并且同时运行,但是有没有办法让所有函数停止运行,直到第一个函数完成?简而言之,我的表单在 ajax 运行 db 检查重复值之前提交。所以我需要它首先运行函数 1 来检查重复项,然后运行函数 2 以在提交之前完成验证。

function f1(){
   ...ajax
}
function f2(){
  ...
}

$(function() {

    $("#MyForm").submit(function(){
        f1();
        f2();
        return false            
    })
})

【问题讨论】:

  • JavaScript 不是异步的。

标签: jquery ajax function


【解决方案1】:

如果您使用的是 Jquery ajax,则可以运行成功块中的第二个函数

$("#MyForm").submit(function(){
      $.ajax({
    .
    .
    success:function(response) { f2(); }
    });
});

【讨论】:

    【解决方案2】:

    在f1中返回AJAXpromise如下,然后使用.then()

    function f1(){
       return $.ajax(/***/);//return the deferred
    }
    function f2(){
      ...
    }
    
    $(function() {
        $("#MyForm").submit(function(){
            f1()
            .then(f2);
            return false            
        })
    })
    

    如果您有兴趣,您可能想在 promisejs.org 上阅读一些关于 Promise 的内容

    【讨论】:

      【解决方案3】:

      在函数 1 的 ajax 调用的成功部分,只需调用函数 2

      函数 f1(){ ...阿贾克斯 f2() } 函数 f2(){ ... }

      $(函数() {

      $("#MyForm").submit(function(){
          f1();
          return false            
      })
      

      })

      【讨论】:

        【解决方案4】:

        抱歉解释有误

        function f1()
        {
        $.post('url','data',function(res){
        
        f2();
        })
        
        }
        function f2{
        
        }
        

        也许这个有帮助。

        【讨论】:

        • 更新了我的回答我的道歉。
        猜你喜欢
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        • 2021-10-18
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 2014-07-20
        • 1970-01-01
        相关资源
        最近更新 更多