【问题标题】:Return statement executes before ajax responsereturn 语句在 ajax 响应之前执行
【发布时间】:2015-02-27 23:50:48
【问题描述】:

我正在对提交按钮单击事件进行 ajax 调用,以检查服务器端的字段验证。 当我收到验证失败时,ajax 响应会给出正确的错误消息,返回 false,并停止表单以提交到操作 url。但是当我得到“成功”的响应时,表单仍然没有提交到操作 url 脚本。

在ajax响应之前执行return语句是这种情况吗?

还有为什么没有提交表单?

代码如下:

<input type="submit" onclick="return validate();" name="submit" value="Proceed" />

<script type="text/javascript">
    var flag=false;
    function validate(){

        $.ajax({
            type:"POST",
            url:"../chk.php",
            data:datastring,
            cache: false,
            success: function (result) {


                if(result.toString() == "success" ){

                    flag=true;

                }

                else{
                    $('#error').css('display', 'block');
                    $('#error').css('color','red');
                    $('#error').text(result.toString());
                    flag=false;
                }
            }

        });


        return flag;
    }
</script>

【问题讨论】:

    标签: javascript php jquery ajax forms


    【解决方案1】:

    Ajax 是异步的,因此您只需将函数作为参数传递给函数,然后在 ajax 调用成功时执行它。

    function my_callback() {
        alert('done');
    }
    
    function validate(cb) {
        $.ajax({
            /* ... */
            success: function() {
                cb();
            }
        });
    }
    

    您传递给validate 的函数将在success 函数调用时执行。

    【讨论】:

      【解决方案2】:

      一种方法是

      使用async : false

      将 async 设置为 false 意味着您正在调用的语句必须在函数中的下一条语句被调用之前完成。

      $.ajax({
                  type:"POST",
                  url:"../chk.php",
                  data:datastring,
                  cache: false,
                  async : false,
                  success: function (result) {
      

      还有你为什么要在ajax函数之外返回值,如果你不使用async : false则在ajax成功返回值

       $.ajax({
                  type:"POST",
                  url:"../chk.php",
                  data:datastring,
                  cache: false,
                  success: function (result) {
      
      
                      if(result.toString() == "success" ){
      
                          flag=true;
      
                      }
      
                      else{
                          $('#error').css('display', 'block');
                          $('#error').css('color','red');
                          $('#error').text(result.toString());
                          flag=false;
                      }
                  }
      
                   return flag;
      
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-16
        • 2020-01-20
        • 1970-01-01
        • 2018-08-28
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多