使用AJAX重新加载验证码

时间:2010-05-15 21:00:13

标签: php javascript ajax captcha reload

这个问题可能已经被提出 - 但不幸的是,我找不到任何令人满意的答案。我会问我的具体案例,并要求管理员至少几天不要删除这个问题,以便我可以尝试一下......

我有一个页面。它使用验证码。像这样:

<?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"

每次var ranNum事件触发时,都会随机生成JavaScript变量onclick。它工作正常,但是,我不喜欢这种可能性,如果 - 虽然不太可能 - 两个数字的情况连续两次相同。虽然随机数在-50,000到50,000之间变化 - 我仍然不喜欢它。我不认为这种方法是对的。我想通过AJAX了解'righter'方法。我知道这是可能的。我希望你知道它是如何可能的^^在这种情况下,请告诉我。

提前致谢!

顺便说一下 - 如果我拼写cap(t)cha不同,请不要介意,PHP文件的引用就在我的代码中:我使用randomImage.php

编辑:只生成JavaScript中的随机数,以便重新加载图像。 Captcha.php不关心$ _GET参数。这个字符串确实是随机的。

编辑:因此,我想知道的是如何让浏览器在每次事件触发时不会传递不同的get参数来重新映射图像。

4 个答案:

答案 0 :(得分:5)

不幸的是,AJAX没有提供动态加载图像的好方法。即使使用javascript“预加载”技巧,浏览器也会每个URL加载一次图像。让浏览器从同一个源加载另一个图像的唯一好方法是使用与您现在正在执行的不同的参数。并且,正如其他答案所述,时间戳应该足够了。

答案 1 :(得分:3)

您是否考虑使用时间戳?

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

答案 2 :(得分:1)

只需使用:

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

您可以丢弃时间参数并在PHP中生成随机数。 :)

答案 3 :(得分:0)

您也可以从Ajax请求base64编码中获取图像,并将其放入img标记中。

当然我认为它有点矫枉过正,而base64编码的文件大约是原始大小的4/3。 (基础64上的3 kb图像约为4kb)。

编辑: 拥有像

这样的img src属性

数据:图像/ PNG; BASE64,base64encodedimage