前辈们:小弟现在使用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的流程