2015-11-19 10 views
9

में वापसी पर सही और गलत पर अजाक्स फ़ंक्शन समस्या मैं regex के लिए वर्डप्रेस पोस्ट टिप्पणियों textarea में AJAX और jquery के साथ एक फॉर्म को मान्य कर रहा हूं। लेकिन एक मुद्दा है जब मैं झूठी वापसी के साथ एक त्रुटि संदेश को सतर्क करना चाहता हूं। अमान्य डेटा के साथ यह ठीक काम कर रहा है और अलर्ट दिखा रहा है और सबमिट नहीं कर रहा है। लेकिन जब मैं वैध डेटा डालता हूं तो फॉर्म जमा नहीं होता है। वापसी झूठी के साथ मुद्दा हो सकता है।वर्डप्रेस

मैंने चर बनाने और सही & को गलत बनाने की कोशिश की और AJAX सफलता ब्लॉक को बाहर निकाला लेकिन मेरे लिए काम नहीं किया।

यह ठीक काम करता है जब मैं इसे कोर php, AJAX, jquery के साथ करता हूं लेकिन वर्डप्रेस में काम नहीं कर रहा हूं।

यहां मेरा 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 
} 

और मुझे वर्डप्रेस 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(); 
} 
?> 

अग्रिम धन्यवाद।

+1

समस्या 'वापसी झूठी' के साथ है। झूठी वापसी आपके फॉर्म को सबमिट करने से रोक देगा। जहां तक ​​मुझे पता है, आप AJAX के साथ मान्य करना चाहते हैं और यदि यह सत्यापित है तो आप फॉर्म जमा करना चाहते हैं। सही? –

+0

मुझे लगता है कि आपको दूसरी वापसी वापसी को हटा देना चाहिए; ' – madforstrength

+0

हां सही। और जब यह वैध डेटा नहीं है तो उसे फॉर्म जमा नहीं करना चाहिए। – Shaban

उत्तर

3

आखिर में, मैंने इसे अपने आप से बाहर निकाला।

अजाक्स कॉल में बस async: false डालें। और अब यह ठीक काम कर रहा है। इसके अलावा एक खाली वैरिएबल बनाएं और इसमें बूलियन मानों को स्टोर करें और उसके बाद AJAX कॉल उस वैरिएबल को वापस कर दें।

यहाँ मेरे पिछले कोड है:

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, 

मैं इसका उपयोग क्यों करें

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 
} 

और मुद्दा यह है कि मैं का समाधान कर लिया

नए कोड

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

यह है कि।

रास्ते के उत्तरों के लिए धन्यवाद।

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 अनुरोध आप के लिए वापसी प्रकार डाल करने के लिए। अगर यह काम करता है तो मुझे बताएं।

+0

वही परिणाम जैसा मैंने पहले किया था। – Shaban

+0

तो यदि आप वैध डेटा डाल रहे हैं, तो भी आप फॉर्म जमा नहीं कर सकते? –

+0

फॉर्म दोनों मामलों में मान्य या अमान्य डेटा में सबमिट किया गया है। अमान्य डेटा केस अलर्ट में पॉपअप है और जब मैं ठीक क्लिक करता हूं तो फॉर्म सबमिट किया जाता है। – Shaban

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 में है कि फ़ंक्शन को कॉल करें और केवल गिनती वापस जाने के लिए की जरूरत है कहते हैं!