在wordpress中返回真假的Ajax函数问题

Posted

技术标签:

【中文标题】在wordpress中返回真假的Ajax函数问题【英文标题】:Ajax function issue on return true and false in wordpress 【发布时间】:2016-02-21 04:59:20 【问题描述】:

我在 WordPress post cmets textarea 中验证一个带有 ajax 和 jquery 的表单,用于正则表达式。但是当我想用 return false 来警告错误消息时会出现问题。它使用无效数据工作正常并显示警报并且未提交。但是当我输入有效数据时,表格不会提交。 return false 可能有问题。

我尝试制作变量并存储 true & false 并将条件应用到 ajax 成功块中,但对我不起作用。

当我使用核心 php、ajax、jquery 但不能在 WordPress 中工作时,它工作正常。

这是我的 ajax,jquery 代码。

require 'nmp_process.php';

add_action('wp_ajax_nmp_process_ajax', 'nmp_process_func');
add_action('wp_ajax_nopriv_nmp_process_ajax', 'nmp_process_func');

add_action('wp_head', 'no_markup');
function no_markup() 
    ?>    
<script type="text/javascript">
        jQuery(document).ready(function () 
            jQuery('form').submit(function (e) 
                var comment = jQuery('#comment').val();
                jQuery.ajax(
                    method: "POST",
                    url: '<?php echo admin_url('admin-ajax.php'); ?>',
                    data: 'action=nmp_process_ajax&comment=' + comment,
                    success: function (res) 
                        count = res;
                        if (count > 10) 
                            alert("Sorry You Can't Put Code Here.");
                            return false;
                        
                    
                );
                return false;
            );
        );

    </script>
<?php

我正在使用 wordpress wp_ajax 钩子。

这是我的 php 代码。

    <?php
function nmp_process_func ()
$comment = $_REQUEST['comment'];
preg_match_all("/(->|;|=|<|>||)/", $comment, $matches, PREG_SET_ORDER);
$count = 0;
foreach ($matches as $val) 
    $count++;

echo $count;
wp_die();

?> 

提前致谢。

【问题讨论】:

问题出在return false。返回 false 将停止您的表单提交。据我所知,您想使用 ajax 进行验证,如果经过验证,那么您想提交表单。对吗? 我认为你应该删除第二个return false; 是的,没错。当它的数据无效时,它不应该提交表单。 我试过了。它可以正常处理有效数据,但另一方面,当存在无效数据时,它也会通过 alert 提交。 你的$matches数组中有什么? 【参考方案1】:

尝试使用单击事件进行 ajax 调用,如果字段有效,则提交表单:

jQuery(document).ready(function () 
            jQuery("input[type=submit]").click(function (e) 
                var form = $(this).closest('form');
                e.preventDefault();
                var comment = jQuery('#comment').val();
                jQuery.ajax(
                    method: "POST",
                    url: '<?php echo admin_url('admin-ajax.php'); ?>',
                    data: 'action':'nmp_process_ajax','comment':comment,
                    success: function (res) 
                       var count = parseInt(res);
                        if (count > 10) 
                            alert("Sorry You Can't Put Code Here.");

                         else 
                              form.submit();
                        
                    
                );
            );
        );

注意:您调用需要在 php 中调用该函数并仅返回计数!

【讨论】:

【参考方案2】:

最后,我自己想通了。

只需将async: false 放入ajax 调用。现在它工作正常。另外创建一个空变量并在其中存储布尔值,然后在 ajax 调用后返回该变量。

这是我之前的代码:

    require 'nmp_process.php';

add_action('wp_ajax_nmp_process_ajax', 'nmp_process_func');
add_action('wp_ajax_nopriv_nmp_process_ajax', 'nmp_process_func');

add_action('wp_head', 'no_markup');
function no_markup() 
    ?>    
<script type="text/javascript">
        jQuery(document).ready(function () 
            jQuery('form').submit(function (e) 
                var comment = jQuery('#comment').val();
                jQuery.ajax(
                    method: "POST",
                    url: '<?php echo admin_url('admin-ajax.php'); ?>',
                    data: 'action=nmp_process_ajax&comment=' + comment,
                    success: function (res) 
                        count = res;
                        if (count > 10) 
                            alert("Sorry You Can't Put Code Here.");
                            return false;
                        
                    
                );
                return false;
            );
        );

    </script>
<?php

我解决的问题是,

新代码

var returnval = false;
jQuery.ajax(
           method: "POST",
           url: '<?php echo admin_url('admin-ajax.php'); ?>',
           async: false, // Add this
           data: 'action=nmp_process_ajax&comment=' + comment,

我为什么使用它

Async:False 将持有剩余代码的执行。一旦你得到 ajax 的响应,剩下的代码才会执行​​。

然后像这样简单地将布尔值存储在变量中,

success: function (res) 
                        count = res;
                        if (count > 10) 
                            alert("Sorry You Can't Put Code Here.");
                            returnval = false;
                         else 
                            returnval = true;
                        
                    
                );
                // Prevent Default Submission Form
                return returnval; );

就是这样。

顺便谢谢你的回答。

【讨论】:

【参考方案3】:

将提交按钮绑定到点击事件,而不是提交表单。

jQuery("input[type=submit]").on("click",function()
   //ajax call here
   var comment = jQuery('#comment').val();
   jQuery.ajax(
       method: "POST",
       url: '<?php echo admin_url('admin-ajax.php'); ?>',
       data: 'action=nmp_process_ajax&comment=' + comment,
       success: function (res) 
             count = res;
              if (count > 10) 
                  alert("Sorry You Can't Put Code Here.");
                  return false;
               else
                  jQuery("form").submit();
               
           
      );
   return false;
)

另外,将返回类型放入 ajax 请求也是一个好主意。 让我知道这是否有效。

【讨论】:

所以即使您输入了有效数据,您也无法提交表单? 表单在两种情况下都以有效或无效数据提交.,.在无效数据情况下,弹出警报,当我单击确定时,表单已提交。 为什么在按钮上使用点击事件,如果你可以简单地监听表单的提交事件。如果 sombody 通过在输入字段中按 enter 来提交表单怎么办?

以上是关于在wordpress中返回真假的Ajax函数问题的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 中的 AJAX 只返回 0

WordPress 中的 Ajax 调用返回整个 HTML 页面作为响应

Wordpress 如何使用 Ajax 显示从成功的 insert_post() 返回的新数据?

返回值中的函数混淆,啥是明确的真假?

Wordpress AJAX 不起作用 - 响应 0

WordPress ajax 没有返回我所期望的