3

我是 Ajax 和 Jquery 的新手,想在登录页面上执行一些验证(使用 wordpress)。

我使用此代码来捕获登录表单的提交...

$("#login").submit(function (e) {
    $.ajax({
        type: "post",
        dataType: 'json',
        url: ajax_login_object.ThemeFolder + "/log-in-script.php",
        data: {
            'user_login': user_login,
                'user_pass': user_pass,
                'action': 'login'
        },
        success: function (data) {
            if (data.succeeded == true) {
                // JUST WANT TO SUBMIT THE FORM HERE
                // tried return true.. no joy
                // tried $("#login").submit() but just ends up with neverending loop
                // tried document.href etc but lose the POST data
                // tried nesting another ajax call but no joy
                // ????
            }
        }
    });
    e.preventDefault();
});

在我的 log-in-script.php 中,我检查了一些东西。例如,如果他们没有填写密码字段但他们的用户名在数据库中,我会重置他们的密码。如果他们没有填写密码字段并且他们的用户名不在数据库中,那么我注册他们。

如果他们输入了用户名和密码,我只想正常提交表单,但我正在为如何做到这一点而苦苦挣扎。我确定我错过了一些非常简单的东西。

非常感谢任何帮助。

谢谢

约翰 ;-)

4

1 回答 1

8

尝试

$("#login")[0].submit()

直接在表单元素上调用submit(),避免提交事件回调的调用

演示:http: //jsfiddle.net/5Xv5f/1/

更新:

对于大多数浏览器和所有基于 Gecko 的应用程序都是如此:

https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement.submit

从基于 Gecko 的应用程序调用此方法时,不会触发表单的 onsubmit 事件处理程序(例如,onsubmit="return false;")。一般来说,它不能保证被 HTML 用户代理调用。

但是,W3 标准对此没有任何规定。

所以如果你想 100% 确定,你可以这样做:

$("#login").submit(function (e) {

    // submit if already checked
    if($(this).attr("data-checked")) {
          return true;
    }

    $.ajax({
        type: "post",
        dataType: 'json',
        url: ajax_login_object.ThemeFolder + "/log-in-script.php",
        data: {
            'user_login': user_login,
                'user_pass': user_pass,
                'action': 'login'
        },
        success: function (data) {
            if (data.succeeded == true) {
                // JUST WANT TO SUBMIT THE FORM HERE

                // flag as checked
                $("#login").attr("data-checked","1");

                // submit
                $("#login").submit()            
            }
        }
    });
    e.preventDefault();
});

演示http://jsfiddle.net/AEJ6S/

于 2013-09-13T13:20:32.360 回答