使用jQuery的ajax调用来刷新验证码

时间:2010-08-16 08:13:14

标签: php ajax captcha

我编写了自己的php captcha脚本,带有jpeg标题,以便我可以说

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

2 个答案:

答案 0 :(得分:5)

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

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

我假设captcha.php唯一能做的就是将captcha值存储在会话变量中,并在访问时输出验证码图像。

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

答案 1 :(得分:0)

将实际的CAPTHCHA字符串存储在_SESSION变量中是有意义的,但是您应该在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();
}