2011-06-11 32 views
0

我试着在Google上进行研究,并在这里浏览了一些问题。我尝试了一些解决方案,但我无法让他们工作。使用jQuery问题进行验证码刷新

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

任何人都可以帮助我?

+0

有什么问题?什么是“不工作”? – corroded 2011-06-11 06:09:06

+0

工作不意味着验证码不会刷新 – user236501 2011-06-11 06:10:33

+0

'$(“ refresh_captcha”)'将无法工作,因为没有与类名'refresh_captcha'但第二个应该够没有元素。你看到'r'的值每次点击都随机化了吗? – tradyblix 2011-06-11 06:16:00

回答

0

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

对我来说,这个解决方案使用AJAX的呼叫和Java春天在后台工作:

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。它的importent禁用缓存并发送get的时间戳。这样做后,一个小小的jQuery魔术就完成了,验证码的来源将更改为图像 - Url +时间戳。

希望它会为你工作PHP作为良好。