return语句在ajax响应之前执行

时间:2015-01-01 06:27:00

标签: javascript php jquery ajax forms

我正在对提交按钮点击事件进行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>

2 个答案:

答案 0 :(得分:3)

Ajax是异步的,所以你应该只将函数作为参数传递给函数,然后在ajax调用成功时执行它。

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

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

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

答案 1 :(得分:3)

单向是

使用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;

        });