$.ajax在谷歌浏览器传入中文乱码的情况
有运营同学反映,后台编辑的一个中文显示名称,前台乱码了,于是乎~~
先看代码是否get请求没转码:
ajaxSettings: {url: ajaxLocation,isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),global: true,type: "GET",contentType: "application/x-www-form-urlencoded; charset=UTF-8",processData: true,async: true,/*timeout: 0,data: null,dataType: null,username: null,password: null,cache: null,traditional: false,headers: {},*/accepts: {xml: "application/xml, text/xml",html: "text/html",text: "text/plain",json: "application/json, text/javascript","*": allTypes},contents: {xml: /xml/,html: /html/,json: /json/},responseFields: {xml: "responseXML",text: "responseText"},// List of data converters// 1) key format is "source_type destination_type" (a single space in-between)// 2) the catchall symbol "*" can be used for source_typeconverters: {// Convert anything to text"* text": window.String,// Text to html (true = no transformation)"text html": true,// Evaluate text as a json expression"text json": jQuery.parseJSON,// Parse text as xml"text xml": jQuery.parseXML},// For options that shouldn't be deep extended:// you can add your own custom options here if// and when you create one that shouldn't be// deep extended (see ajaxExtend)flatOptions: {context: true,url: true}},
各种~~~~,再探~1.7源码里面也是没有的
好吧,1.7.2里面没有这个问题。
结论:
1、使用1.7.2之前的版本,在使用$.ajax的时候需要自行设置contentType否则,谷歌会乱码。
2、跟浏览器也有关系,火狐就可以自动加上utf-8而谷歌则不会,也行jquery团队发现这个问题,所以就在最新版更正了这个问题。
测试及生成环境:
1、java环境,打包gbk,页面编码gbk,tomcat中URIEncoding配置utf-8等,也许应该跟这些服务器配置也是有关系的,就不深究下去了。
猜测:一般post表单请求的请求数据编码是按照页面里面的meta指定的编码格式编码的,我们页面是gbk的,所以在谷歌浏览器在未指定ajax的contentType参数的时候采用默认页面编码方式gbk编码然后发送到服务器端,而我们tomcat里面的URIEncoding是utf-8的,所以就两边编码不一样,就乱码了,显式的指定一下就ok。不过貌似ajax统一都是utf-8的来编码的,就算不指定也不会有问题,莫不是谷歌。。。。