【问题标题】:Captcha refresh using jQuery problem使用 jQuery 问题进行验证码刷新
【发布时间】:2011-06-11 05:33:34
【问题描述】:

我尝试在 Google 上进行研究,并在此处浏览了一些问题。我尝试了一些解决方案,但无法让它们发挥作用。

<td>
    <img id="captcha" src="captcha.php" name="captcha" />
    <img src="refresh.jpg" width="25" alt="" id="refresh_captcha" name="refresh_captcha" />
    <input type="text" name="txtCaptcha" id="txtCaptcha" size="10" />
</td>

下面的代码不起作用:

$('.refresh_captcha').click(function(){
    $('img').attr('src', 'captcha.php?cache=' + new Date().getTime());
});

我也试过这个:

$("#refresh_captcha").click(function() {
    $("#captcha").attr("src","captcha.php?r=" + Math.random());
});

还有这个:

jQuery(function($) {
    jQuery('#captcha').after("<a href=\"#\" id=\"refresh_captcha\">Refresh<\/a>");
    jQuery('body').delegate('#refresh_captcha','click',function(){
        jQuery.ajax({
            'success':function(html){
                jQuery("#captcha").attr("src",html)
            },
            'url':'/captcha.php?refresh=1',
            'cache':false
        });
        return false;
    });
});

有人可以帮助我吗?

【问题讨论】:

  • 有什么问题?什么是“不工作”?
  • 不工作意味着验证码不会刷新
  • $('.refresh_captcha') 将不起作用,因为没有类名为 refresh_captcha 的元素,但第二个应该足够了。您是否看到每次单击时r 的值都会随机化?
  • 另外,如果您直接在地址栏中访问captcha.php 并不断点击刷新,它会改变吗?如果不是验证码本身有问题
  • 如果我自动刷新页面图像会改变

标签: php jquery refresh captcha


【解决方案1】:

您是否也尝试清空缓存? (编辑:是的,你做到了......)问题是否出现在所有浏览器中?我认为您的浏览器缓存了旧图像,因为您的直接调用似乎有效。试试cache: false 而不是'cache' = false

对我来说,这个在后端使用 ajax 调用和 Java Spring 的解决方案有效:

function generateCaptcha() {

    $.ajaxSetup({
      cache: false
    });

    var timestamp = (new Date()).getTime();

    requestMappingCaptcha = "/generateCaptcha";

    jQuery.get(requestMappingCaptcha, timestamp, function(data) {
                $("#captchaImg").slideUp("fast");

                if (!$.browser.msie || ($.browser.msie && $.browser.version == "9.0")) { 
                        // animate reloadArrows
                        $("#reloadArrows").rotate({
                        angle:0, 
                        animateTo:360
                    });  
                }

                // setting new source
                var newSrc = $("#captchaImg").attr("src").split("?");
                newSrc = newSrc[0] + "?" + timestamp;
                $("#captchaImg").attr("src", newSrc);
                $("#captchaImg").slideDown("fast");
        });
}

以及相应的 HTML:

                        <div class="container captcha">
                            <spring:url value="/captcha.jpeg" var="url"/>
                            <div class="step2_captcha">
                                <img id="captchaImg" src="${url}" alt="Generatin captcha..." width="180" height="42" border="0" name="captchaImg"/>
                            </div>
                            <span class="help captcha">
                                <img src="/r.png" onclick="generateCaptcha();" id="reloadArrows" title="Reload Captcha"/>
                            </span>
                            &nbsp;
                        </div>

它有什么作用!?通过单击图标,将调用函数generateCaptcha。请求映射调用了一个服务器函数(在我的例子中是 java),并将一个新的验证码呈现到与旧验证码相同的 URL。禁用缓存并使用get 发送时间戳很重要。完成后,jQuery 的小魔法就完成了,验证码的来源将更改为 image-Url + 时间戳。

希望它也适用于您的 php。

【讨论】:

    【解决方案2】:
            function fcapCha() {
                var timestamp = (new Date()).getTime();
                var newSrc = $(".capChaCaptchaImgID").attr("src").split("?");
                newSrc = newSrc[0] + "?" + timestamp;
                $(".capChaCaptchaImgID").attr("src", newSrc);
                $(".capChaCaptchaImgID").slideDown("fast");
            }
            function resetCapcha() {
                fcapCha();
                $('.acapChapinputCaptcha').val('');
            }
    

    最好的祝福!

    【讨论】:

    • 你能补充一些解释吗
    • 好的,你可以制作三个标签,例如:一个标签使用刷新验证码: ,Img显示的验证码图片:,使用的输入标签插入验证码文本: ...等
    猜你喜欢
    • 2016-06-09
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多