欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Ajax request response 乱码解决方法

程序员文章站 2022-06-17 14:07:44
此功能已进入试用一周了,都没有问题,奇怪的是今天出现了问题?? 复制代码 代码如下:ajaxrequestobj.createeqstatusparameter=funct...
此功能已进入试用一周了,都没有问题,奇怪的是今天出现了问题??
复制代码 代码如下:

ajaxrequestobj.createeqstatusparameter=function() {
    if (eqstatusarray.length < 1) {
        return;
    }
    var paramnamearray = new array();
    var paramvaluearray = new array();
    //取状态数组
    for (var index = 0, step = eqstatusarray.length; index < step; index++) {
        var tempeqstatusobj = eqstatusarray[index];
        paramnamearray.push(tempeqstatusobj.eqcode + "`" + tempeqstatusobj.opdatetime);
        paramvaluearray.push(tempeqstatusobj.status);
    }
    //分解、生成请求串。
    var paramstr = "";
    paramstr = paramstr.concat("eqstatusnames=").concat(encodeuricomponent(paramnamearray.join(","))).concat("&");
    paramstr = paramstr.concat("eqstatusvalues=").concat(encodeuricomponent(paramvaluearray.join("`")));
    return paramstr;
};

xmlhttpobj.setrequestheader("content-type","application/x-www-form-urlencoded")
xmlhttpobj.send(param);
客户端将参数以utf-8方式传递给应用端,在使用此参数时直接从request中取就可以。
[ajax接收响应信息]
直接使用forward跳转实现div局部内容变更
复制代码 代码如下:

if ("doqueryrequest".equals(actparam)) {
    equiputils equiputilsobj = equiputils.getinstance();
    //取查询参数、拼接
    equipstatusmgrobj.setequipcondition(equiputilsobj.createequipfilter(request));
    equipstatusmgrobj.setequipstatuscondition(equiputilsobj.getequipstatusdate(request));
    //设备信息
    list<dynabean> equiparray = equipstatusmgrobj.queryequip(null);
    //设备状态
    map<string, map<string, string>> equipstatusmapping =
        equipstatusmgrobj.queryequipstate4map(equiparray, null);
    sessionobj.setattribute("paginationentity", equipstatusmgrobj.getpaginationentity());
    sessionobj.setattribute("equipcondition", equipstatusmgrobj.getequipcondition());
    sessionobj.setattribute("eqstatuscondition", equipstatusmgrobj.getequipstatuscondition());
    request.setattribute("equiplist", equiparray);
    request.setattribute("datelist", equipstatusmapping);
    try {
        request.getrequestdispatcher("/eq/detectpoint/innereqstatusrefresh.jsp").forward(request, response);
    } catch (exception e) {
        e.printstacktrace();
    }
} else if ("getpagetoolbar".equals(actparam)) {
    paginationentity pentity = (paginationentity) sessionobj.getattribute("paginationentity");
    string tempstr = pentity.getpaginationtool();
    outputstream out;
    try {
        response.setcontenttype("text/html;charset=utf-8");
        out = response.getoutputstream();
        out.write(tempstr.getbytes("utf-8"));
        out.flush();
        out.close();
    } catch (ioexception e) {
        e.printstacktrace();
    }
}

因为,目前使用xmlhttpobj.responsetext,responsetext默认就是utf-8所以将跳转的页面弄成utf-8是不错的选择。至少不用担心乱码。。
[乱码原因]
之前此功能使用的是gb18030编码,到修改为止在其它客户机以及同事的机器上都非常正常,但就是我自己的机器翻页出现乱码。当我将此功能所用到的呈现文件统一使用utf-8就ok了,也不知那xmlhttpobj触动了机器的那个神经。。查了些资料也都是说搞国际化的趋势,问题是解决了但原因没有找到!
[发现一bug]
response.setcontenttype("text/html;charset=utf8");在我机器上不抛错,但在同事的机器上就会抛错
改成response.setcontenttype("text/html;charset=utf-8");一切ok..