0

これはリンクです

<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ヘッダーを介してキャッシュを使用していませんが、運がありません。

お知らせ下さい。

4

2 に答える 2

0

onclickの代わりに使用href="javascript:loadCaptcha();"

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

また

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

<script type="text/javascript">
 $(document).on("click", "#reloadCaptcha", loadCaptcha);
</script>
于 2013-03-03T04:02:13.107 に答える
0

IE と Firefox は、キャッシュの問題によりキャプチャ イメージを更新しません。回避策は、毎回キャプチャ イメージを削除し、一意の名前で新しいキャプチャ イメージを作成することです。名前は一意であるため、キャプチャが更新され、FF は画像が新しいため再読み込みされます。

毎回一意のキャプチャ画像を再作成し、リロード時にその一意の画像を呼び出すことで、この問題を修正しました。

于 2013-03-03T12:48:37.120 に答える