Ajax-Funktionsproblem bei der Rückgabe von true und false in WordPress

Lesezeit: 5 Minuten

Benutzeravatar von Shaban
Schaban

Ich validiere ein Formular mit Ajax und Jquery im Textbereich für WordPress-Postkommentare für Regex. Aber es gibt ein Problem, wenn ich eine Fehlermeldung mit falscher Rückgabe warnen möchte. Es funktioniert gut mit ungültigen Daten und zeigt eine Warnung an und sendet nicht. Aber wenn ich gültige Daten eingebe, wird das Formular nicht gesendet. Möglicherweise liegt ein Problem mit der Rückgabe falsch vor.

Ich habe versucht, Variablen zu erstellen und wahr und falsch zu speichern und Bedingung aus dem Ajax-Erfolgsblock anzuwenden, aber es hat bei mir nicht funktioniert.

Es funktioniert gut, wenn ich es mit Core PHP, Ajax, Jquery mache, aber nicht in WordPress.

Hier ist mein Ajax-, Jquery-Code.

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
}

Und ich benutze WordPress wp_ajax Hook.

Und hier ist mein PHP-Code.

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

Danke im Voraus.

  • Das Problem ist mit return false. Wenn Sie false zurückgeben, wird das Absenden Ihres Formulars gestoppt. Soweit ich weiß, möchten Sie mit Ajax validieren und wenn es validiert ist, möchten Sie das Formular einreichen. Rechts?

    – Harry Bomrah

    19. November 2015 um 7:27 Uhr

  • Ich denke, Sie sollten die zweite entfernen return false;

    – Muhammad Bilal

    19. November 2015 um 7:29 Uhr

  • Ja richtig. Und wenn es sich um ungültige Daten handelt, sollte das Formular nicht gesendet werden.

    – Schaban

    19. November 2015 um 7:30 Uhr

  • Ich versuchte es. Es funktioniert gut mit gültigen Daten, aber wenn ungültige Daten vorhanden sind, werden sie auch mit alert gesendet.

    – Schaban

    19. November 2015 um 7:34 Uhr

  • was hast du in deinem $matches Reihe?

    – Madalinivascu

    19. November 2015 um 8:00 Uhr

Benutzeravatar von Shaban
Schaban

Letztendlich habe ich es einfach selbst herausgefunden.

Einfach setzen async: false im Ajax-Aufruf. Und jetzt funktioniert es gut. Erstellen Sie außerdem eine leere Variable und speichern Sie boolesche Werte darin und geben Sie diese Variable nach dem Ajax-Aufruf zurück.

Hier ist mein bisheriger Code:

    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
}

Und das Problem, das ich gelöst habe, ist,

Neuer Code

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,

Warum ich es benutze

Async:False hält die Ausführung des Restcodes. Sobald Sie eine Antwort von Ajax erhalten, wird der Rest des Codes ausgeführt.

Und dann speichern Sie Boolean einfach in einer Variablen wie dieser,

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

Das ist es.

Danke übrigens für die Antworten.

Benutzeravatar von madalinivascu
Madalinivascu

Versuchen Sie, einen Ajax-Aufruf mit einem Klickereignis durchzuführen, und wenn die Felder gültig sind, senden Sie das Formular ab:

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

Hinweis: Sie müssen diese Funktion in PHP aufrufen und nur die Anzahl zurückgeben!

Anstatt das Formular abzusenden, binden Sie die Schaltfläche „Senden“ an ein Klickereignis.

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

Außerdem ist es eine gute Idee, den Rückgabetyp in Ihre Ajax-Anfrage einzufügen. Lassen Sie mich wissen, ob das funktioniert.

  • Selbst wenn Sie gültige Daten eingeben, können Sie das Formular nicht absenden?

    – Harry Bomrah

    19. November 2015 um 7:45 Uhr

  • Formular wird in beiden Fällen mit gültigen oder ungültigen Daten übermittelt.,. Bei ungültigen Daten wird eine Warnung angezeigt, und wenn ich auf „OK“ klicke, wird das Formular gesendet.

    – Schaban

    19. November 2015 um 7:54 Uhr


  • Warum ein Click-Event auf einem Button verwenden, wenn man sich einfach das Submit-Event des Formulars anhören kann. Was ist, wenn jemand das Formular durch Drücken der Eingabetaste in einem der Eingabefelder absendet?

    – wawa

    19. November 2015 um 8:04 Uhr

1390340cookie-checkAjax-Funktionsproblem bei der Rückgabe von true und false in WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy