java ajax 返回乱码,解决使用$.ajax的时候得到返回乱码

场景:本来是一个文件下载接口,因为需求是要在新窗口中打开而不是下载,所以使用$.ajax去请求,可以得到文件的文本内容,不过内容中的中文全部都是乱码。下面给出使用$.ajax时的代码(不全):

$.ajax({

type: 'get',

url: targetUrl,

complete : function(xhr,status){ //请求完成后最终执行参数

if(status === 'success') {

var respContentType = xhr.getResponseHeader('Content-Type'); //这里得到的是'text/html'

var respText = xhr.responseText; //此处得到的字符串中的中文为乱码

}

}

})

分析原因:首先观察控制台的返回值,在network中发现response中的文本没有出现乱码,放回的html文本中meta的charset为 'GB2312',而preview中显示出现了问题,而且直接在浏览器中打开这个路径的时候下载得到的文件也是没有乱码的,返回的请求头的contentType为 'text/html',这里没有指定编码格式,所以感觉是返回的时候因为没有指定编码格式,所以ajax使用了utf-8处理了。

解决方案:尝试使用xmlHttpRequest来发送请求,代码如下:

function xhrLoadText(url, onSuccess, onFailure) {

onSuccess = onSuccess || function _onSuccess(data) {};

onFailure = onFailure || function _onFailure() {};

var xhr = new XMLHttpRequest();

xhr.open('GET', url, true);

if (xhr.overrideMimeType) {

xhr.overrideMimeType('text/html; charset=GB2312'); // 关键是这里

}

xhr.onreadystatechange = function () {

if (xhr.readyState == 4) {

if (xhr.status == 200 || xhr.status === 0) {

onSuccess(xhr.responseText);

} else {

onFailure();

}

}

};

xhr.onerror = onFailure;

xhr.ontimeout = onFailure;

try {

xhr.send(null);

} catch (e) {

onFailure();

}

}

这里对overrideMimeType做一下说明:XMLHttpRequest 的 overrideMimeType 方法是指定一个MIME类型用于替代服务器指定的类型,使服务端响应信息中传输的数据按照该指定MIME类型处理。例如强制使流方式处理为"text/xml"类型处理时会被使用到,即使服务器在响应头中并没有这样指定。此方法必须在send方法之前调用方为有效。(https://developer.mozilla.org...)

使用上面的函数,发现问题得到解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值