Использовать AJAX для перезагрузки captcha

Возможно, этот вопрос уже задан – но, к сожалению, я не смог найти удовлетворительных ответов. Я просто спрошу его для моего конкретного случая и попрошу администраторов не удалять вопрос в течение как минимум нескольких дней, поэтому я могу попробовать его …

У меня есть страница. Он использует капчу. Вот так:

<?php session_start(); // the captcha saves the md5 into the session ?> <img src="captcha.php" onclick="this.src = this.src" /> 

Это был мой первый код. Это не сработало, потому что браузер счел бесполезным перезагрузить изображение, если источник тот же. Мое текущее решение – передать параметр get:

 onclick="this.src = 'captcha.php?randomNumber='+ranNum" 

JavaScript-переменная var ranNum генерируется случайным образом каждый раз при срабатывании события onclick . Он отлично работает, но мне не нравится эта возможность, если хотя бы невероятный случай двух чисел является одним и тем же дважды подряд. Хотя случайное число колеблется между -50 000 и 50 000 – мне все еще не нравится. И я не думаю, что метод прав. Я хотел бы узнать «более быстрый» метод с помощью AJAX. Я знаю, что это возможно. Надеюсь, ты знаешь, как это возможно. ^ В таком случае, пожалуйста, покажи мне.

Заранее спасибо!

Кстати, если я заклинаю cap (t) cha по-разному, неважно, ссылка на файл PHP верна в моем коде: я использую randomImage.php

EDIT: случайное число в JavaScript генерируется только так, что изображение перезагружается. Captcha.php не имеет значения для параметра $ _GET. Строка действительно случайна.

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

    К сожалению, AJAX не обеспечивает хороший способ динамической загрузки изображений. Даже использование javascript «preload» трюк просто заставляет браузер загружать каждое изображение за один URL. Единственный хороший способ заставить браузер загружать другое изображение из того же источника – использовать другой параметр, как и сейчас. И, как утверждают другие ответы, для этого должно быть достаточно метки времени.

    Вместо этого вы считали использовать временную метку?

     onclick="this.src='captcha.php?ts='+Math.round(new Date().getTime()/1000)" 

    Просто используйте:

    <img src="captcha.php" onclick='this.src = "captcha.php&time=" + new Date().getTime();' />

    Вы можете отменить параметр времени и сгенерировать случайное число в PHP. 🙂

    Вы также можете получить изображение из Ajax-запроса base64 и вставить его в тег img.

    Конечно, я думаю, что это слишком много, и файл с кодировкой base64 составляет около 4/3 от размера оригинала. (Изображение размером 3 kb будет около 4kb на base64).

    Изменить: иметь атрибут img src как

    данные: изображения / PNG; base64, base64encodedimage