【问题标题】:Ajax validation issueAjax 验证问题
【发布时间】:2011-12-05 06:43:26
【问题描述】:

我正在使用下面的代码通过 ajax 验证和发布表单数据。

问题是,如果在验证期间发生错误,它不会中断发布。这是我的代码

var autoSaveInterval = null;
var counter = 0;

function call() {
    postViaAjax(true)
}

function postViaAjax(autosaveMode) {
    var name = $("#name").val();
    var title = $("#title").val();
    var menu = $("#menu").val();
    var parentcheck = $(".parentcheck:checked").val();
    var id = $("#id").val();
    var author_id = $("#author_id").val();
    if (parentcheck == 0) {
        var parent = parentcheck;
    } else {
        var parent = $("#parent").val();
    }
    var content = CKEDITOR.instances['content'].getData();
    content = encodeURIComponent(content);
    var dataString = 'name=' + name + '&title=' + title + '&menu=' + menu + '&parentcheck=' + parentcheck + '&id=' + id + '&parent=' + parent + '&content=' + content + '&author_id=' + author_id;
    $.ajax({
        type: "POST",
        url: "processor/dbadd.php",
        data: dataString,
        dataType: "json",
        success: function (result, status, xResponse) {
            var message = result.msg;
            var err = result.err;
            var now = new Date();
            if (message != null) {
                if (autosaveMode) {
                    $('#submit_btn').attr({
                        'value': 'Yadda saxlanıldı ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds()
                    });
                } else {
                    $.notifyBar({
                        cls: "success",
                        html: message + ' ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds()
                    });
                }
            }
            if (err != null) {
                $.notifyBar({
                    cls: "error",
                    html: err
                });
            }
        }
    });
};



function validate() {
    var name = $("#name").val();
    if (name == "") {
        $.notifyBar({
            cls: "error",
            html: "Səhifənin qısa adını daxil edin"
        });
        return false;
    }
    var title = $("#title").val();
    if (title == "") {
        $.notifyBar({
            cls: "error",
            html: "Səhifənin geniş adını daxil edin"
        });
        return false;
    }
    var menu = $("#menu").val();
    if (menu == "") {
        $.notifyBar({
            cls: "error",
            html: "Səhifə harada yerləşəcək? Mütləq birini seçin"
        });
        return false;
    }

    var parentcheck = $(".parentcheck:checked").val();
    var parent = $("#parent").val();
    if (!$(".parentcheck").is(":checked")) {
        $.notifyBar({
            cls: "error",
            html: "Ayrıca yoxsa hansısa başlıq altında? Mütləq birini seçin"
        });

        return false;
    } else if (parentcheck == '1') {
        if (parent == '0') {
            $.notifyBar({
                cls: "error",
                html: " Parent səhifəni seçin"
            });
            return false;
        }
    }

    return true;
}

$(document).ready(function () {

    $('.autosave').hide();
    $("#add_form").submit(function (e) {
        if (counter === 0) {
            if (validate()) {
                $('.autosave').show();
                counter++;
            }
        }
        postViaAjax(false)
        e.preventDefault();
    });


    $('#autosave').click(function () {
        if ($(this).is(':checked')) {
            if (autoSaveInterval) {
                clearInterval(autoSaveInterval);
            }
            autoSaveInterval = window.setInterval(call, 5000);

        } else {
            $('#submit_btn').attr({
                'value': 'Yadda saxla'
            });
            if (autoSaveInterval) {
                clearInterval(autoSaveInterval);
                autoSaveInterval = null;
            }
        }
    });

});

如何解决这个问题?我只想显示消息和中断发帖

【问题讨论】:

    标签: javascript ajax jquery post


    【解决方案1】:

    改变你的“提交”功能:

    $("#add_form").submit(function (e) {
        if (counter === 0) {
            if (validate()) {
                $('.autosave').show();
                counter++;
            }
            else // Add this:
                 return false;
        }
        postViaAjax(false)
        e.preventDefault();
    
    
    });
    

    这应该对你有帮助

    【讨论】:

    • 哦,非常感谢。上帝祝福你。这一回让我抓狂。我在这部分停留了一段时间。如果您使用任何 IM,请给我您的联系方式。
    【解决方案2】:

    其他选项可能是在将数据发布到 Web 服务器之前使用 jquery 验证插件。 并在您的 java 脚本文件中使用

    $("#Form").validate();
    

    【讨论】:

    • 我已经为我的表单编写了验证,如果一个地方缺少返回或其他东西,为什么要重新制作整个这个东西?
    【解决方案3】:

    改变你的“提交”功能:

    $("#add_form").submit(function (e) {
        if (counter === 0) {
            if (validate()) {
                $('.autosave').show();
                counter++;
            }
        }
        postViaAjax(false)
        e.preventDefault();
    
        // Add this:
        return false;
    });
    

    【讨论】:

    • 它没有帮助。我仍然在错误消息之后直接看到成功消息
    • 通过说“我仍然看到成功消息”,您的意思是您正在被重定向? (或出现 ajax 消息)
    • 如果你读过我的 js,在 ajax 发布后有关于成功的消息,我首先看到错误消息,然后是成功消息(它意味着 ajax 已发布)并使用 firebug 跟踪整个过程。这是截图prntscr.com/3fqm7
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2011-11-27
    • 2010-11-22
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多