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


Posted in Javascript onNovember 28, 2013

解决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;
}
Javascript 相关文章推荐
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
Nov 05 Javascript
基于jquery的图片轮播 tab切换组件
Jul 19 Javascript
JS操作Cookies包括(读取添加与删除)
Dec 26 Javascript
js原型继承的两种方法对比介绍
Mar 30 Javascript
删除Javascript Object中间的key
Nov 18 Javascript
js实现从中间开始往上下展开网页窗口的方法
Mar 02 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 Javascript
vue2中使用less简易教程
Mar 27 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 Javascript
react中hook介绍以及使用教程
Dec 11 Javascript
原始XMLHttpRequest方法详情回顾
Nov 28 #Javascript
jQuery处理xml格式的返回数据(实例解析)
Nov 28 #Javascript
使用js写的一个简易的投票
Nov 27 #Javascript
juery框架写的弹窗效果适合新手
Nov 27 #Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 #Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 #Javascript
js字符串截取函数substr substring slice使用对比
Nov 27 #Javascript
You might like
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
PHP编写RESTful接口
2016/02/23 PHP
Zend Framework开发入门经典教程
2016/03/23 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
Python入门篇之编程习惯与特点
2014/10/17 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
美国校服网上商店:French Toast
2019/10/08 全球购物
个人委托书范本
2014/09/13 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
介绍信格式
2015/01/30 职场文书
美容院员工规章制度
2015/08/05 职场文书
药房管理制度范本
2015/08/06 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL
python热力图实现的完整实例
2022/06/25 Python