programing

워드프레스에서 true 및 false 반환 시 Ajax 함수 문제

lastmoon 2023. 3. 18. 09:16
반응형

워드프레스에서 true 및 false 반환 시 Ajax 함수 문제

regex의 WordPress 투고 코멘트 텍스트 영역에서 ajax와 jquery로 폼을 검증하고 있습니다.그러나 오류 메시지에 return false를 경고하는 경우 문제가 있습니다.유효하지 않은 데이터와 경고를 표시하여 정상적으로 동작하며 전송되지 않습니다.하지만 제가 유효한 데이터를 넣었을 때 양식이 제출되지 않습니다.반품이 거짓일 수 있습니다.

변수, 저장, true & false, 적용 조건을 ajax 성공 블록에 적용하려고 했지만 효과가 없었습니다.

core php, ajax, jquery로 하면 정상적으로 동작하지만 WordPress에서는 동작하지 않습니다.

여기 내 아약스 코드야

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
}

워드프레스 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();
}
?> 

잘 부탁드립니다.

마침내, 나는 그것을 스스로 알아냈다.

그냥 넣어주세요async: false에 액세스 합니다.그리고 지금은 잘 작동하고 있습니다.또한 빈 변수를 만들고 그 변수에 부울 값을 저장한 후 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:Falserest code 실행을 유지합니다.일단 당신이 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; });

바로 그겁니다.

그나저나 답변 감사합니다.

클릭 이벤트와 함께 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에서 해당 함수를 호출하고 개수만 반환해야 합니다.

폼을 전송하지 않고 [Submit]버튼을 클릭이벤트에 바인드 합니다.

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 요청에 반환 유형을 추가하는 것도 좋습니다.이게 효과가 있는지 알려주세요.

언급URL : https://stackoverflow.com/questions/33797324/ajax-function-issue-on-return-true-and-false-in-wordpress

반응형