2010-10-31 65 views
1

我检索从基于Java包“SimpleCaptcha”captcha图像回来一个二进制数据?如何显示这个?

在前端captcha图像我只是把我的网页下面,我得到一个验证码图片:

<img src="stickyImg" /> 

我想使用javascript重新加载此验证码图像。

我想:

$("#theclickhandler").click(function(){ 
    $("#stickyImg").load('stickyImg', function(response){   
     $("#stickyImg").attr('src', response); 
    }); 
    return false; 
}); 

这得到了图像,但输出是这样的(显然大大缩短):

<img src="captcha image�PNG �ݚ��L�23U�݆�}$�J����Dy����IEND�B`� "> 

这看起来像原始的二进制数据给我。 我如何得到这个工作?

回答

2

图像标签的src属性指定到哪里加载的图像是,不是图像的内容的浏览器。所以你把图像的内容塞进你想要的位置,这就给你垃圾,因为它根本没有意义。

因此,要重新加载图像,你需要告诉图像的地址已经改变了浏览器。仅仅将图像的src属性中的位置重写为相同的地址是不够的 - 它不会告诉浏览器更改任何内容。你可以通过在查询字符串中填充一些随机数据来解决这个问题,比如请求的时间。像@mikerobi建议,你可以重写src标签,这里将时间戳查询字符串(你的servlet几乎肯定会忽略)的修改:

$('#stickyImg').attr('src', 'stickyImg?' + (new Date().getTime())); 
+0

迷人!我不知道。尽管它对我来说很接近魔术,但它的效果很好。感谢您解释背后的“为什么”。 – Lothar 2010-10-31 04:19:02

1

您不能使用这种方法来加载图片,您需要将图像URL属性设置为图像生成的路径。

$('#stickImg').attr('src', 'path/to/image/generator'); 
+0

那么,在使用(就这样)的HTML加载图像。所以我认为要重新加载它,我应该使用该加载方法(在我的示例中)来抓取同样的东西,“stickyImg”。我什么都不知道关于Java所以我怎么找到路径图像生成,更容易混淆的我,为什么工作时,页面加载但不是当我把它就像我在我的加载方法呢?原谅我,我是一个从未在我的生活中碰过Java的前端人物。 – Lothar 2010-10-31 03:17:48

+0

这是不够的,如果路径没有改变,你需要在URL上添加额外的东西。 – 2010-10-31 03:45:09

0

我不知道有多少浏览器支持它,但是可以base64对图像进行编码,并将其前缀(取决于图像格式)“data:image/png; base64”,并将其用作图像的URI。

相关问题