当前位置: 代码迷 >> Java Web开发 >> 前辈们:小弟现在使用Ajax制作局部刷新验证码,在获取服务端发送过来的图像流的时候出现有关问题了,关键代码代码如下
  详细解决方案

前辈们:小弟现在使用Ajax制作局部刷新验证码,在获取服务端发送过来的图像流的时候出现有关问题了,关键代码代码如下

热度:262   发布时间:2016-04-17 01:06:57.0
前辈们:小弟现在使用Ajax制作局部刷新验证码,在获取服务端发送过来的图像流的时候出现问题了,关键代码代码如下:
这里是Ajax需要用的JavaScript:
JScript code
function createXMLRequset(){    if(window.XMLHttpRequest){        XMLHttp = new XMLHttpRequest();    }else if(window.ActiveObject){        XMLHttp = new ActiveObject("Microsoft.XMLHTTP");    }}function doAjax(){    createXMLRequset();    XMLHttp.open("POST","initLogin.action",true);    XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");    XMLHttp.onreadystatechange = p;    XMLHttp.send(null);}function p(){    if(XMLHttp.readyState == 4){        if(XMLHttp.status == 200){            var str = XMLHttp.responseText;            document.getElementById("init").src=str;        }    }}


下面是id为 init的img标签:<a href="#"><img src="initLogin.action" id="init" title="点击图片刷新验证码" onclick="doAjax()"/></a>

下面是initLogin.action:的代码:

Java code
public String initLogin(){        RandomNumUtil randomNumUtil = RandomNumUtil.Instance();        this.setInputStream(randomNumUtil.getImage());        ActionContext.getContext().getSession().put("random", randomNumUtil.getString());        return SUCCESS;    }

说明一下RandomNumUtil randomNumUtil = RandomNumUtil.Instance();这个是产生验证码图像的类,randomNumUtil.getImage()这个是获得验证码图像返回的是ByteArrayInputStream类型

下面是该Action的配置:

<action name="initLogin" class="com.alan.easyoa.action.EmployeeAction" method="initLogin">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>

正常访问该页面验证码能显示,使用点击图片后服务端确实返回值了,但是返回的一个流,我尝试使用 XMLHttp.responseText来接受服务端返回的值,但是接收到的是乱码,什么用都没有。请问各位前辈们我在这个函数里里面该怎么处理接收到的这个流?已经怎么处理它?
JScript code
function p(){    if(XMLHttp.readyState == 4){        if(XMLHttp.status == 200){            var str = XMLHttp.responseText;            document.getElementById("init").src=str;        }}


小弟先谢谢,各位能在万忙之中抽出时间来看小弟这个问题。

------解决方案--------------------
验证码用什么ajax
直接
onclick="javascript:document.getElementById('init').src='initLogin.action?update=' + Math.random()"
就可以啦
------解决方案--------------------
处理不了
var str = XMLHttp.responseText;
是个字符串。楼主用Ajax没用的,你的验证码图片是自动生成的,
生成验证码类应该是个Servlet,你jsp页面
a href="#"><img src="initLogin.action" id="init" title="点击图片刷新验证码" onclick="doAjax()"/></a>
的src改成src="生成验证码的Servlet"
onclick="一个方法"把src=Servlet重新执行一下就OK,不一定非得走Struts2的流程
  相关解决方案