提交事件时停止重新加载站点

时间:2013-12-11 17:29:15

标签: jquery ajax plugins return alert

嘿,我有这个小脚本在用户点击“提交”时运行:

$(document).ready(function(){
  $("form").submit(function(){

    var username = $("#username-field").val();
    if(username) { 
        $.ajax({
            url: 'check.php',
            data: {data: JSON.stringify(username)},
            type: 'POST',
            dataType: "json",
            success: function (data) {
                if(data.result == 0) {
                    alertify.error( data.error );
                    return false;
                }
            }
        });
    } else { 
        alertify.alert( "You forgot to type username" );
        return false;
    }
  });
});

当我在username-input-field ...中输入内容时,脚本“check.php”返回0,但没有显示alertify.error。

不是显示alertiy.error(data.error)而是重新加载页面?为什么?我设置“return false”,所以不应该刷新。

BUT: 如果我在输入字段中没有输入任何内容,那么if子句将变为false并且这样可行:

    } else { 
        alertify.alert( "You forgot to type username" );
        return false;
    }

那么为什么这会起作用,但是ajax-example没有呢?

3 个答案:

答案 0 :(得分:1)

试试这个代码段,应该解决您的问题:

$(document).ready(function () {
    $("form").submit(function () {
        var username = $("#username-field").val();
        if (username) {
            $.ajax({
                context:this, //set context here
                url: 'check.php',
                data: {
                    data: JSON.stringify(username)
                },
                type: 'POST',
                dataType: "json",
                success: function (data) {
                    if (data.result == 0) {
                        alertify.error(data.error);
                    }
                    else this.submit(); //submit form using DOM node property (not calling jq handler)
                }
            });
        } else {
            alertify.alert("You forgot to type username");            
        }
        return false;
    });
});

答案 1 :(得分:0)

您需要在$.ajax电话IIRC之外返回false。回调返回与函数的返回值不同。

答案 2 :(得分:0)

将return false返回到if语句之外的末尾。你想要总是返回false,所以从逻辑上来说,if语句里面没有任何意义,因为它并不依赖于条件。

$(document).ready(function(){
  $("form").submit(function(){
    var form = this;
    var username = $("#username-field").val();
    if(username) { 
        $.ajax({
            url: 'check.php',
            data: {data: JSON.stringify(username)},
            type: 'POST',
            dataType: "json",
            success: function (data) {
                if(data.result == 0) {
                    alertify.error( data.error );
                    //return false;
                }
                else {
                    form.submit();
                }
            }
        });
    } else { 
        alertify.alert( "You forgot to type username" );
        //return false;
    }
    return false;
  });
});

它没有按原样运行的原因是因为当您在成功回调中返回时,您的页面已经重新加载。成功的回调甚至没有被执行。