Используйте ajax-вызов jQuery для обновления капчи - PullRequest
2 голосов
/ 16 августа 2010

Я написал свой собственный скрипт php captcha с заголовком jpeg, так что я могу сказать

<img src="captcha.php">

, который работает путем сохранения значения капчи в переменной сеанса.Когда пользователь не может прочитать его, я хочу, чтобы его можно было обновить.

Сначала я попробовал

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

, но, конечно, это не имеет смысла, и мне нужно сделатьвместо этого вызов ajax.Как бы вы все порекомендовали мне это сделать?

PS Я тоже попробовал

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

Ответы [ 2 ]

5 голосов
/ 16 августа 2010

Первый метод действительно имеет смысл для меня:

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

Я предполагаю, что единственное, что делает captcha.php, это сохраняет значение капчи в переменной сеанса и выводит изображение капчи при каждом обращении к нему.

Таким образом, когда вы снова установите src изображения и добавите в него переменную строки запроса, запрос снова будет отправлен на серверный скрипт "captcha.php", который затем сгенерирует капчу и сохранит новое значение в переменной сеанса.

0 голосов
/ 16 августа 2010

Имеет смысл сохранить фактическую строку 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();
}
...