Ajax函数问题在wordpress中返回true和false

时间:2015-11-19 07:08:57

标签: php jquery ajax regex wordpress

我在WordPress中使用ajax和jquery验证表单,发表评论textarea for regex。但是当我想用返回false来警告错误消息时会出现问题。它工作正常,无效数据和显示警报,并没有提交。但是当我输入有效数据时,表格不会提交。可能是返回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 hook。

这是我的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();
}
?> 

提前致谢。

3 个答案:

答案 0 :(得分:3)

最后,我自己想出来了。

只需将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的响应,只有这样,其余的代码才会执行​​。

然后只需将Boolean存储在这样的变量中,

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; });

那就是它。

顺便感谢答案。

答案 1 :(得分:2)

尝试使用点击事件进行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 :(得分:1)

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

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请求中。 如果有效,请告诉我。