您好,欢迎访问一九零五行业门户网

JavaScript中的常见问题解决方法(乱码,IE缓存,代理)_javascript技巧

解决ajax中文乱码常用的两种方法
1. 在客户端进行encodeuri(utf-8也可以不做,默认),在服务器端将iso-8859-1编码转为utf-8编码
2.在客户端进行两次encodeuri,在服务器端进行一次转换。
第2种方法能解决问题的原因:
进行两次转换后,在第一次getparameter方法中进行第一次解码,因为解出来的是英文(第一次encode之后的结果),所以不会出问题;第二次使用urldecoder的decode方法,所以能正常解决这个问题。需要注意的是,在decode方法中需要指定解码格式为utf-8。很多中文平台使用的并不是utf-8(我猜应该是gb2312),所以decode的默认转换并不一定是utf-8。
之所以在客户端进行两次编码而在服务器只进行一次解码,我猜是tomcat的缘故。tomcat为了让程序员编程方便(get和post用一样的代码),所以会自动对post的编码进行解码,所以在服务器端就少了一次手写的解码语句。之所以还要再进行一次编码解码,是因为tomcat自动解码的操作并不一定是按照我们希望的编码解的,但英文等字符无论在什么平台上解出的码都是一样的,因此可以让tomcat自动解译出第一次编码后的结果,再手动来解译encodeuri一次的代码,就可以获得自己所需的格式。
补充:现在又观察了一下浏览器的行为,觉得不是tomcat的缘故,因为在浏览器里的显示的是中文,而不是编码后的东西,对于这些个编码问题现在是一头雾水,希望知道这方面知识的朋友不吝赐教!
解决ie缓存的问题
    加一个时间戳,并且要检查?
解决代理问题
    要将?转为$
示例代码:
复制代码 代码如下:
function verify() {
    //解决中文乱麻问题的方法1,页面端发出的数据作一次encodeuri,服务器段使用new string(old.getbytes(iso8859-1),utf-8);
    //解决中文乱麻问题的方法2,页面端发出的数据作两次encodeuri,服务器段使用urldecoder.decode(old,utf-8)
    var url = ajaxserver?name= + encodeuri(encodeuri($(#username).val()));
    url = converturl(url);
    $.get(url,null,function(data){
        $(#result).html(data);
});
}
//给url地址增加时间戳,骗过浏览器,不读取缓存
function converturl(url) {
    //获取时间戳
    var timstamp = (new date()).valueof();
    //将时间戳信息拼接到url上
    //url = ajaxserver
    if (url.indexof(?) >= 0) {
        url = url + &t= + timstamp;
    } else {
        url = url + ?t= + timstamp;
    }
    return url;
}
其它类似信息

推荐信息