2017-01-26 153 views
4

使用reCaptcha時,我遇到了問題。在代碼中,使用AJAX提交表單。在提交之前,我需要檢查字段是否填滿。如果字段未填寫,則不應發生提交。reCAPTCHA隱形 - 重新提交表單問題

在這種情況下,如果textfields沒有填充,它會發出警報。

問題出在無效帖子被拒絕後,提交按鈕停止工作2到3分鐘,reCaptcha沒有給出錯誤。經過一段時間後,reCaptcha再次開始工作並提交按鈕。

<form id="contact-form" method="post" action="javascript:void(0)"> 
     <input type="text" placeholder="Name" id="name"> 
     <input type="text" placeholder="E-Mail" id="email"> 
     <textarea placeholder="Message" id="message">/textarea> 
     <button class="g-recaptcha pull-right" data-sitekey="#your-site-key" data-callback="sendData" type="submit"> SEND <i class="flaticon-origami34"></i> </button> 
</form> 

的Javascript:

function sendData(){ 

    console.log('send data - '); // --> works 

    //send datas: 

    $("#contact-form").submit(); 

}; 

$('#contact-form').on("submit", function() { 

console.log('clicked submit'); // --> works 

name = $('#name').val().replace(/<|>/g, ""), // prevent xss 
    email = $('#email').val().replace(/<|>/g, ""), 
    msg = $('#message').val().replace(/<|>/g, ""); 

if (name == '' || email == '' || msg == '') { 

    alert("Please fill all areas !"); 

} else { 

    console.log('captcha response: ' + grecaptcha.getResponse()); // --> captcha response: 

    // ajax to the php file to send the mail 
    $.ajax({ 
     type: "POST", 
     url: "SaveContact.php", 
     data: "email=" + email + "&name=" + name + "&msg=" + msg + "&g-recaptcha-response=" + grecaptcha.getResponse() 
    }).done(function(status) { 
     if (status == "ok") { 
      // clear the form fields 
      $('#name').val(''); 
      $('#email').val(''); 
      $('#message').val(''); 
     } 
    }); 

}}); 
+0

那麼有什麼不工作? –

+0

不工作,2或3分鐘。在那之後工作。 –

回答

2

然後,你需要重新設置無形的reCAPTCHA的冷卻時間,你可以使用一個黑客這樣

var recaptchaIframe = document.querySelector('.grecaptcha-badge iframe'); 
recaptchaIframe.src = recaptchaIframe.src; 

我沒有更好的解決辦法。

0

根據documentation,您還可以致電grecaptcha.reset(opt_widget_id);,其中opt_widget_id是可選的,並且將默認爲第一個創建的recaptcha小部件。

0

如果您呈現的reCAPTCHA明確在這樣的腳本:

var form = grecaptcha.render('idSelector', { 
    'sitekey' : 'your_sitekey', 
    'callback': callableFunction 

}, true) 

那麼,「形式」變量包含WIDGET_ID,這樣你就可以重置驗證碼這樣的

grecaptcha.reset(form); 
0

想通了這一點,如果其他人有同樣的問題,我想發佈它。谷歌的示例代碼集的按鈕ID爲「submit」,並在onSubmit中調用「submit」函數失敗,因爲它。更改ID到其他任何修復它。