【发布时间】:2012-11-08 15:28:56
【问题描述】:
好吧,这太吓人了.... 我正在尝试重新加载在服务器端生成的验证码图像,我不想为此重新加载整个页面,因此我必须使用 AJAX。 所以我要做的是首先在服务器端(使用 AJAX)触发一个 php 文件,它会更新所有需要的东西,这样我就可以拥有一个新的验证码图像。 然后,当这完成后,我只需更新图像 src="",以从该 php 文件加载新图像。 代码如下:
- 文件 1
HTML:
<tr id="rowWithCaptcha">
<td><p><img id="captchaImg" src="./?<?php echo session_name() ?>=<?php echo session_id() ?>"/></p></td>
</tr>
JQuery 脚本:
$("#reloadImg").click(function(){
$.ajax({
url: 'getNewKCAPTCHA.php',
cache: false,
type: 'POST',
async: false,
success: function(){
$("#captchaImg").attr("src","http://localhost/Captcha2/TestPages/TestPage3Q/getNewKCAPTCHA.php?");
}
});
});
- 文件二:
PHP: kcaptcha.php 是所有验证码魔法发生的地方:) 因此,如果您只是在浏览器中打开此 php 文件,您将获得验证码图像本身。 如果你重新加载页面,图像每次都会改变.....
<?php include('kcaptcha.php'); session_start(); $captcha = new KCAPTCHA(); $_SESSION['captcha_keystring'] = $captcha-getKeyString(); echo TRUE; ?>
所以现在奇怪的是,整个事情(AJAX 调用和图片更新)在新的 chrome 浏览器上运行良好,但是当我用 FFOX 或 IE 尝试它时,它只运行一次,任何进一步的点击都不起作用改变任何东西.....我认为它与 JQuery 部分有关,但我无法让它工作 :///
感谢每一个帮助!!! 提前谢谢!
【问题讨论】:
-
您知道您可以在没有任何 ajax 的情况下更改 src 属性,因为您没有使用该 ajax 调用中返回的数据?将图像源设置为 PHP 文件,并在不使用返回数据的情况下执行 ajax 让我觉得您并没有真正理解这个概念?
-
还要考虑缓存问题:如果您一次又一次地分配相同的 SRC,可能浏览器正在使用缓存版本的内容。考虑添加一些不同的参数,例如
var d = new Date (); $("#captchaImg").attr ("src", "http://localhost/Captcha2/TestPages/TestPage3Q/getNewKCAPTCHA.php?r=" + d.getTime ()); -
@adeneo:我不知道我可能没有得到这个概念,但我需要确保 php 文件中的图像是新的。 Hende 我需要用 ajax 触发它,所以我想.....也许你可以提供一个没有 ajax 的解决方案???那将非常感激.....因为毕竟我还在学习过程中;)
标签: php jquery ajax firefox google-chrome