【问题标题】:JQuery Ajax - reload Image onClick works with chrome but not with firefox nor with IEJQuery Ajax - reload Image onClick 适用于 chrome 但不适用于 firefox 或 IE
【发布时间】: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


【解决方案1】:

假设

url: 'getNewKCAPTCHA.php',

http://localhost/Captcha2/TestPages/TestPage3Q/getNewKCAPTCHA.php?

其实是同一个脚本,不需要调用两次。

考虑这个简单的方法(这是我在实际项目中使用的工作方法):

$("#reloadImg").click(function(){
    var d = new Date ();
    var captcha = "http://localhost/Captcha2/TestPages/TestPage3Q/getNewKCAPTCHA.php?r=" + d.getTime ();
    $("#captchaImg").attr ("src", captcha);
});

http://jsfiddle.net/hGfgn/

问候

【讨论】:

  • 非常有用,谢谢!! 这是解决我的问题的方法:) 我只是不知道调用 php 文件的任何其他方式,然后是通过 AJAX,但是现在我知道我该怎么做才能做到这一点! !!大干杯:)
【解决方案2】:

这可能与 HTML5 支持有关。我不久前也遇到了同样的问题,似乎FF和IE都不支持

$('whatever').click(function(){});

但如果你在 html-tag 中使用 onclick="function()" 调用它可以工作,但我不知道它是否工作

【讨论】:

  • 你是说IE和FF不支持标准的jQuery点击功能?
  • 好吧,我也不好意思去看看,但到目前为止我一直在使用这个 $('whatever').click(function(){});在我的项目中经常遇到问题。
  • 我不确定这个错误何时发生,但似乎很清楚至少在某些情况下 FF 和 IE 将不支持 jQuery Click 功能。请不要问为什么,至少不是我。但可以复制
【解决方案3】:

我不是编辑 src 属性的忠实粉丝。 我通常会删除图像(或替换为加载图像),然后附加新图像(并删除加载图像)。下面的代码应该删除图像并附加一个新图像 - 我错过了所有缓冲图像替换的东西

 $("#reloadImg").click(function(){
               $.ajax({
                  url: 'getNewKCAPTCHA.php',
                  cache: false,
                  type: 'POST',  
                  async: false,
                  success: function(){
                     $("#captchaImg").remove();
                     $("#rowWithCaptcha td p").append('<img id="captchaImg" src="http://localhost/Captcha2/TestPages/TestPage3Q/getNewKCAPTCHA.php?" />');

                  }
               });
            });

希望对你有帮助

【讨论】:

  • 是的....有相同的想法并尝试它我仍然遇到了同样的问题,FFOX 和 IE 只做一次,而 chrome 确实有效...... :/
  • 您是否按照其他人的建议完成并在文件末尾添加基于时间的变量以确保图像没有缓存?
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 2013-05-03
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多