当前位置: 首页 > 面试题库 >

如何在AJAX调用后继续提交表单?

米元凯
2023-03-14
问题内容

我想在点击提交按钮时验证WordPress帖子上的用户条目,显示错误消息是否存在问题,如果一切正常,则提交表单。我有一个PHP函数进行检查,true如果输入的数据form_data还可以,则返回,否则返回一些错误代码。以下JavaScript发出AJAX请求,并应在成功检查后继续提交表单,但不会:

        jQuery(document).ready(function() {
            jQuery('#post').submit(function() {

                var form_data = jQuery('#post').serializeArray();
                var data = {
                    action: 'ep_pre_submit_validation',
                    security: '<?php echo wp_create_nonce( 'pre_publish_validation' ); ?>',
                    form_data: jQuery.param(form_data),
                };
                var proceed = false;
                jQuery.post(ajaxurl, data, function(response) {
                    if (response.indexOf('true') > -1 || response == true) {
                        proceed = true;
                    } else {
                        alert("Error: " + response);
                        proceed = false;
                    }
                });
                jQuery('#ajax-loading').hide();
                jQuery('#publish').removeClass('button-primary-disabled');
                return proceed; //breakpoint here makes the code run
            });
        });

该代码是根据WPSE问题改编的,该问题最初对我不起作用,因为未提交表单。我发现,如果绑定到的jQuery函数.submit()返回true,则应提交表单,这就是我尝试实现的方法。使用上面的代码,它似乎一开始并不起作用(在没有错误的情况下,表单不会被提交),但是在Firebug
proceed进行仔细检查后,如果return proceed在行中插入了断点,似乎会得到正确的结果。
当我在达到断点后稍等片刻,然后继续执行时,它才对有效数据有效。如果有错误,则发出警报不会出现问题。

处理此问题的最佳方法是什么?

编辑

根据下面的@Linus答案,以下代码可用于有效和无效数据:

        jQuery(document).ready(function() {
            jQuery('#post').submit(function() {
                if(jQuery(this).data("valid")) {
                    return true;
                }

                var form_data = jQuery('#post').serializeArray();
                var data = {
                    action: 'ep_pre_submit_validation',
                    security: '<?php echo wp_create_nonce( 'pre_publish_validation' ); ?>',
                    form_data: jQuery.param(form_data),
                };
                jQuery.post(ajaxurl, data, function(response) {
                    if (response.indexOf('true') > -1 || response == true) {
                        jQuery("#post").data("valid", true).submit();
                    } else {
                        alert("Error: " + response);
                        jQuery("#post").data("valid", false);

                    }
                    //hide loading icon, return Publish button to normal
                    jQuery('#ajax-loading').hide();
                    jQuery('#publish').removeClass('button-primary-disabled');
                });
                return false;
            });
        });

问题答案:

简短的答案:您不能-不是这种方式。

一些背景:作为函数的参数提供的回调$.post是异步执行的。这意味着您将return proceed 执行成功回调 之前
执行,并且proceed始终为false。有了您的断点,如果等到成功的回调已经执行,proceedtrue和一切都会好的。

因此,如果要在ajax请求完成后提交表单,则 必须 使用javascript提交。使用jQuery非常简单,只需$.post使用data: $("yourForm").serialize()和即可完成jQuery url: yourForm.action

基本上,这就是您已经在做的事情,您只需要对实际要将数据发布到的URL重复该调用即可。

编辑:

另一种方法是在表单上设置一个属性,例如valid,然后在submit处理程序中检查以下内容:

jQuery("#post").submit(function() {
    if($(this).data("valid")) {
        return true;
    }
    // Rest of your code
});

在验证ajax请求的成功回调中,您将设置/清除该属性,然后提交:

$("#post").data("valid", true).submit();

编辑:

$.post出于上述相同的原因,您还希望在回调内部启用“ ajax加载” /按钮,因为它是直接在ajax调用返回之前发生的。



 类似资料:
  • 问题内容: 我只能修改ajax调用中的代码。当我单击名为的表单中的提交时,就会发生ajax调用。 问题答案: 您需要在成功处理程序之前将其停止。因为该函数在您的AJAX调用之后完成执行,所以表单将在进行ajax调用时提交(并且在您的ajax调用结束时为时已晚)。 但是,可以,在函数末尾放置return false。 如果在成功处理程序中确实很重要,则可以同步执行调用。

  • 问题内容: 在我的MVC视图中,我有一个按钮: 当我单击此按钮时,我需要调用一个动作,在其中执行一些操作,然后提交我的表单。 我有这个jQuery的: 然后我要提交表格。在控制器中,我有2个动作: 问题是当我按下按钮时,无法到达Action,导致ajax给了我,但是当我删除时,ajax可以正常工作,但是Action永远不会执行。 请问如何执行两个动作的任何想法?我想也许在尝试通过jquery 添加

  • 问题内容: 我认为这很简单,但是正如标题所示,在任何地方都找不到如何执行此操作的方法,就像成功提交表单后如何处理ajax一样。我尝试搜索它,但所看到的只是我需要的相反内容,即在ajax发布后提交。我将尝试草拟与Im正在研究的程序非常相似的程序。 这是我的表格。 这是一个有关ajax帖子的示例(不要介意该帖子的逻辑): 现在,我想做的就是提交表单时,如果提交成功,就会触发ajax发布。因此,就像在一

  • 问题内容: 我有一个page1.php,我有一个fly.php。page1.php是一个简单的(常规)表单页面,当用户提交表单时,人们会在其中放置信息。 通过ajax,它加载验证码模板,并要求即时验证(直到这里很好)。 经过onFly验证后,我要允许此.submit()继续 问题:此验证码中的n个,并在验证成功之后,恢复表单提交(处于保留状态)? 例: 第1部分:page1.php 第2部分:fl

  • 对于如何控制表单中的提交事件,我有点困惑,我试图在这里找到一个简单的答案。 我想在将表单数据发送到表单操作脚本之前验证表单输入。我试图通过捕获submit事件、使用Ajax调用验证脚本来解决这个问题,如果验证成功,我希望调用实际的表单过程。但我不确定该如何进行。简单地使用似乎会失败(我猜是没有发送表单值)。 下面是概念代码: null null

  • 问题内容: 目前,我的AJAX正在这样工作: index.php 一个.php ajax.js 上面的代码运行完美。当我单击链接 “ One”时, 将执行 one.php 并将字符串 “ One” 加载到 工作区DIV中 。 现在,我想使用AJAX提交表单。例如,我在 index.php中 有一个这样的表单。 当我提交表单时, one.php 应该在工作区DIV中打印文本框值。 如何编码js以使用