通过ajax和jquery重新加载外部页面onLinkClick

时间:2013-03-03 03:57:55

标签: php jquery ajax captcha

这是链接

<a href="javascript:loadCaptcha();">Reload</a>

我想点击它并通过ajax和jquery加载外部文件。在我的页面标题中,我有以下javascript代码。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
    $(function(){
        loadCaptcha();
    });
    function loadCaptcha()
    {
        $.ajax({
            type: 'POST',
            url: 'captcha.php',
            data: "",
            cache: false,
            success: function(res){
                $('#captcha').html(res);
            }
        });
    }
</script>

我想点击该链接重新加载captcha.php。 Onpageload文件captcha.php正在id #captcha中加载 - 但是在该链接上点击它没有重新加载。

captcha.php代码

<?php
$capt = generate_captcha();
echo '<img src="captcha.jpg" id="imgcaptcha" name="imgcaptcha" alt="'.$capt.'" style="max-width: 110px; max-height: 35px;" title="Captcha"/><input type="hidden" name="captchacode" id="captchacode" value="'.$capt.'" />';

function generate_captcha()
    {
        $number= rand(11111, 99999);
        $width = 110;
        $height= 35;
        //create image using imagecreate php function
        $img = imagecreate($width, $height);
            $backcolor = imagecolorallocatealpha(
                      $img,
                      hexdec( substr( 'FFFFFF', 0, 2 ) ),
                      hexdec( substr( 'FFFFFF', 2, 2 ) ),
                      hexdec( substr( 'FFFFFF', 4, 2 ) ),
                      127 * ( 100 - 100 ) / 100
                    );
        imagefill($img, 0, 0, $backcolor);
            //create line color
        $linescolor = imagecolorallocatealpha(
                      $img,
                      hexdec( substr( '333333', 0, 2 ) ),
                      hexdec( substr( '333333', 2, 2 ) ),
                      hexdec( substr( '333333', 4, 2 ) ),
                      127 * ( 100 - 70 ) / 100
                    );
        //generate different lines  
        for( $i=0; $i<10; $i++ ) {
            imageline($img, mt_rand(0,110), mt_rand(0,35),
             mt_rand(0,110), mt_rand(0,35), $linescolor);
            }
        //Font file path
        $font_path = "jokerman.ttf";
        //create color for font
        $font_color = imagecolorallocatealpha(
                      $img,
                      hexdec( substr( '000000', 0, 2 ) ),
                      hexdec( substr( '000000', 2, 2 ) ),
                      hexdec( substr( '000000', 4, 2 ) ),
                      127 * ( 100 - 100 ) / 100
                    );
        //add characters to the image
        imagettftext($img, 22, 0, 5, 28, $font_color, $font_path, $number);
        //store image
        imagejpeg($img, "captcha.jpg", 100);
        return $number;
    }
?>

更新:chrome正在显示更新的图片,firefox,即没有更新图片。缓存问题。我没有通过php标头使用缓存,但没有运气。

请告知。

2 个答案:

答案 0 :(得分:0)

使用onclick代替href="javascript:loadCaptcha();"

<a onclick="loadCaptcha();">Reload</a>

OR

<a id="reloadCaptcha">Reload</a>

<script type="text/javascript">
 $(document).on("click", "#reloadCaptcha", loadCaptcha);
</script>

答案 1 :(得分:0)

由于缓存问题,IE和Firefox不会刷新验证码图像。解决方法是每次删除验证码图像并创建具有唯一名称的新验证码图像。因为名称将是唯一的,所以将刷新验证码,并且FF将重新加载图像,因为它是新的。

我已经解决了这个问题,每次重新创建独特的验证码图像,并在重新加载时调用该唯一图像。

相关问题