日期:2014-05-17  浏览次数:20806 次

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