繁体   English   中英

返回语句在ajax响应之前执行

[英]Return statement executes before ajax response

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

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

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

这是代码:

<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>

一种方法是

使用async : false

将async设置为false意味着要调用的语句必须先完成,然后才能调用函数中的下一条语句。

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

以及为什么要返回ajax函数外部的值,如果不使用async : false返回ajax成功内部的值async : false

 $.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;

        });

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

function my_callback() {
    alert('done');
}

function validate(cb) {
    $.ajax({
        /* ... */
        success: function() {
            cb();
        }
    });
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM