2010-08-16 25 views
2

我写我自己的PHP验证码脚本,用JPEG头,这样我就可以说使用jQuery的AJAX调用刷新验证码

<img src="captcha.php"> 

它的工作原理是存储验证码的值到会话变量。当用户无法阅读时,我希望它可以刷新。

我第一次尝试

$("#refresh").click(function() { 
    $("#captcha").attr("src","captcha.php"); 
}); 

当然,这没有任何意义的,但是,我需要做一个Ajax调用来代替。 你会如何推荐我这样做?

P.S.我也试过

$.ajax({ 
    url: "captcha.php", 
    success: function(result) { 
     $("#captcha").attr("src",result); 
    } 
}); 
+0

也许,第一次尝试时,将查询字符串添加到php脚本的url可以改为工作? – 2010-08-16 08:16:19

+0

嗯,第一种方法的问题是php在我做任何事情之前都运行在服务器端,所以在加载页面之后调用php脚本根本行不通。如果我可以用ajax找出一种方法(如第二个例子),它可能会工作,虽然... – codersarepeople 2010-08-16 08:37:51

+0

验证码生成脚本在附加随机查询变量之前输出全套“no cache”标题,以便使尽可能确保每次获取图像的新副本。 – 2010-08-16 15:28:29

回答

5

第一种方法实际上对我来说很有意义:

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

我认为captcha.php所做的唯一事情就是在会话变量中存储captcha值,并输出验证码图像,只要它被访问。

因此,当您再次设置图像的src并为其添加查询字符串变量时,请求会再次发送到服务器脚本“captcha.php”,然后重新生成验证码并存储会话变量中的新值。

0

这是有道理的存储在_SESSION变量的实际CAPTHCHA字符串,但应明确指定的URL状态:

$.ajax({ 
    url: "captcha.php?generateNew", 
    success: function(result) { 
     $("#captcha").attr("src","captcha.php?foo="+Math.random()); 
    } 
}); 

你的PHP文件里:

if(isset($_GET['generateNew']){ 
    $_SESSION['captchaString'] = generateCaptchaString(); 
}else{ 
    dumpCaptchaImage(); 
}