Uncaught ReferenceError: grecaptcha n'est pas défini

J'utilise recaptcha v2

Je reçois de temps en temps l'erreur suivante (parfois, je ne reçois pas d'erreur et parfois je l'obtiens)

 Uncaught ReferenceError: grecaptcha is not defined 

Il semble en raison de la requête HTTP interne. Cela prend du temps pour obtenir un autre js recaptcha__en.js . Pendant ce temps, le code de rendu réel de grecaptcha s'exécute.

Alors, quelle est la solution standard pour éviter ce problème?

PS: bien sûr, je suis à la recherche d'une solution autre que setTimeout

Recaptcha dispose d'un rappel de recharge qui fonctionnera une fois que recaptcha est chargé. Placez votre code dans cette fonction de rappel.

https://developers.google.com/recaptcha/docs/display

 <script> function onloadCallback() { /* Place your recaptcha rendering code here */ } </script> <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"></script> 

J'ai résolu cela en commandant le script en dessous

HTML

 <div id="review_recaptcha"></div> 

JQuery

 <script type="text/javascript"> var review_recaptcha_widget; var onloadCallback = function() { if($('#review_recaptcha').length) { review_recaptcha_widget = grecaptcha.render('review_recaptcha', { 'sitekey' : '<?php echo $site_key?>' }); } }; </script> <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> 

Vous pouvez définir la variable hl=en lorsque vous appelez l'api si la langue vous intéresse!

En tant que tel:

 <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=en"></script> 

Mon problème a été résolu en effectuant les modifications suivantes dans le code du script (:

C'est-à-dire du chemin interne

<script src='static/js/recaptcha/api.js'></script>

À un chemin Google google externe

<script src='https://www.google.com/recaptcha/api.js'></script>