2010-07-30 31 views
128

Tôi có một mẫu đăng ký với AJAX để tôi muốn làm mới hình ảnh Recaptcha bất cứ khi nào xảy ra lỗi (tức là tên người dùng đã được sử dụng).Làm cách nào để tải lại ReCaptcha bằng JavaScript?

Tôi đang tìm mã tương thích với ReCaptcha để tải lại mã bằng JavaScript.

+1

Đừng bận tâm. Tại sao thay đổi CAPTCHA nếu tên người dùng được lấy? – SLaks

+14

* @ SLaks *: có thể vì trước tiên anh ta kiểm tra captcha và sau đó kiểm tra người dùng - và khi captcha được sử dụng, nó không còn giá trị. Làm điều này theo cách khác xung quanh người dùng độc hại có thể dễ dàng làm hỏng máy chủ và nhận danh sách tất cả người dùng sử dụng sức mạnh vũ phu mà không bị làm phiền với captcha. –

+0

@TomaszNurkiewicz CẬP NHẬT: người dùng độc hại sẽ không thể gửi cùng một hình ảnh xác thực lại để xác thực nhiều lần. Vì vậy, không, bruteforce là không thể ở đây.Lý do làm mới captcha chỉ đơn giản là cho phép người dùng nhập lại. –

Trả lời

279

Tôi nghĩ tôi có thể trả lời câu hỏi của riêng mình ngay bây giờ. Đó là

Recaptcha.reload(); 

trong JavaScript nếu có Dấu Recaptcha đã tải trên cửa sổ.


Edit: @SebiH cập nhật rằng lệnh này bây giờ là:

grecaptcha.reset(); 
+16

Câu trả lời này gần như là quá đơn giản. – Lazlo

+17

Đối với bất kỳ ai sử dụng reCAPTCHA mới: Dòng giờ đây đã thay đổi thành 'grecaptcha.reset();' ([documenation] (https://developers.google.com/recaptcha/docs/display#config)) – SebiH

+4

@SebiH được cập nhật . –

5

Hãy thử điều này

<script type="text/javascript" src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script> 
<script type="text/javascript"> 
      function showRecaptcha() { 
      Recaptcha.create("YOURPUBLICKEY", 'captchadiv', { 
       theme: 'red', 
       callback: Recaptcha.focus_response_field 
      }); 
      } 
</script> 

<div id="captchadiv"></div> 

Nếu bạn calll showRecaptcha các captchadiv sẽ được áp dụng với một trường hợp reCAPTCHA mới.

+0

Tôi không có một div như vậy. Mã của tôi giống như vậy: http://pastebin.com/xZ3RGeED –

+0

bạn có thể thay đổi mã của mình và gọi showRecaptcha onload? Điều này có giúp bạn không? – Tim

7

Hoặc bạn có thể chỉ mô phỏng một nhấp chuột vào nút refresh

// If recaptcha object exists, refresh it 
    if (typeof Recaptcha != "undefined") { 
     jQuery('#recaptcha_reload').click(); 
    } 
+1

Vì một số lý do, 'Recaptcha' và' grecaptcha' đều không được xác định trên trang của tôi. Điều này làm việc cho tôi, với một sửa đổi nhỏ: 'if ($ (" # recaptcha_reload "). Length> 0) {....' –

+0

Tôi đã sử dụng nó để biết khi nào kết thúc sự lặp lại của một mảng mà không đếm các phần tử của nó. – erm3nda

44

Nếu bạn đang sử dụng phiên bản 1

Recaptcha.reload(); 

Nếu bạn đang sử dụng phiên bản 2

grecaptcha.reset(); 
+1

điều này giúp tôi, cảm ơn :) – aimhaj

0

nếu bạn đang sử dụng mới reCAPTCHA 2.0 sử dụng này: cho mã sau:

ScriptManager.RegisterStartupScript(this, this.GetType(), "CaptchaReload", "$.getScript(\"https://www.google.com/recaptcha/api.js\", function() {});", true); 

cho javascript đơn giản

<script>$.getScript(\"https://www.google.com/recaptcha/api.js\", function() {});</script> 
6
grecaptcha.reset(opt_widget_id) 

Resets widget reCAPTCHA. Id tiện ích tuỳ chọn có thể được chuyển, nếu không, hàm sẽ đặt lại tiện ích con đầu tiên được tạo. (from Google's web page)

+0

Không chắc chắn tại sao điều này không được chấp nhận. –

+0

nó chỉ đặt lại hình ảnh xác thực đầu tiên trên trang –

+0

@ Maxwells.c Thậm chí bạn đã đọc bài đăng chưa? Bạn có thể tùy ý chuyển id tiện ích và xóa tiện ích con thứ n. Nếu bạn không vượt qua, thì cái đầu tiên được đặt lại. – Kutalia

3

Đối với người dùng AngularJS:

$window.grecaptcha.reset(); 
+0

Trong trường hợp của tôi không có $ - window.grecaptcha.reset(); –

Các vấn đề liên quan