【问题标题】:JQuery how to resubmit form after ajax call successJQuery如何在ajax调用成功后重新提交表单
【发布时间】:2011-03-02 09:49:50
【问题描述】:

我正在使用 JQuery 通过 ajax 请求执行表单提交。我用

form.submit(function() {
    if( success ) {
        return true;
    }

    validate(); //proceeds to an ajax call

    return false;
}

请求成功后,我想继续进行表单提交或用户回调。因此,如果用户回调未定义,我将在表单验证成功时提交表单(来自我的 validate 函数)。

config = {
    successCallback: function() {
        success = true;
        form.submit(); //does not work
    }
};

validate = function() {
    $.ajax(
        ...
        success: function(data) {
            //code logic
            config.successCallback();
        }
    );
};

ajax 成功回调将调用 config.successCallback(),如果它从未被用户覆盖,它将继续进行正常的表单提交。我尝试使用实例变量(成功)来确保“返回 true”将继续进行默认表单提交。

不幸的是,这不起作用。即使设置了实例变量,阻止默认表单提交的“return false”语句似乎也会忽略任何进一步的提交调用。它仅在再次单击提交按钮后才起作用(使其工作两次)。

是否有任何解决方法。我想在提供时使用用户回调,但在不提供时继续使用默认表单提交,并且由于我使用 ajax 函数来验证表单,所以 ajax 成功回调使事情变得复杂。

【问题讨论】:

    标签: jquery ajax forms


    【解决方案1】:

    确保success 在范围内,或者只在成功回调中使用form[0].submit() 来提交DOM 表单并绕过jQuery 注册的处理程序(假设集合中只有一个DOM 表单)。

    http://jsfiddle.net/J4nsx/

    后一种方法实际上是 jQuery 验证插件建议解决 too much recursion 潜在问题的方法。

    【讨论】:

    • 其实.submit()也会导致表单的默认提交动作。我希望文档在单行描述中这样说:api.jquery.com/submit
    • 这听起来像是完美的解决方案,我认为它是(即使用表单而不是包裹在 jquery 对象中的表单),但它似乎仍然不适合我。在从 $.ajax 的成功函数调用的成功回调中,我尝试了 $form[0].submit() (我使用 $ 来表示 jquery 对象)。使用 $form[0].submit 时,console.log 确实输出了一个裸表单,甚至尝试过 form.submit,但代码似乎停在那里,因为在 $form[0].submit() 之后的任何其他代码调用都没有执行?有任何想法吗?如果是这样,我可以粘贴我的 jquery 代码,位于:pastebin.com/U0kQ20mX
    • 您有可以测试的页面吗?当我删除它的 AJAX 部分时,它对我有用:jsfiddle.net/afkWJ
    • 似乎将哨兵值与 $form.click() 一起使用是对我有用的解决方案。但是,经过进一步的调查,我发现这种服务器端的双发并不是我想要的。一旦 ajax 返回 true,所有成功操作都应该在服务器端完成,并且只应该发生重定向。我在这里更新了我的代码:jsfiddle.net/8mYPM。非常感谢您的支持。
    • 我的意思是说 $form.find(':submit').click() 而不是 $form.click();
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2012-04-18
    • 2019-06-07
    相关资源
    最近更新 更多