jQuery ajax post 中文 乱码 的解决方案探讨
Asp 和 Php,本身对接收数据的编码处理能力,都是比较弱的, 而Asp更甚,可以说是弱到极点了
目前,js框架(framework)中,jQuery算是比较火的了,已经受到了微软的青睐,在VS2008里,已经默认加入了jQuery的智能提示
然而,目前的Asp还远未退出历史舞台,而Php更是有自己的一片天空,所以,解决本标题的问题,还是很有意义的
第一部分: ajax pull
(1) 在 目标页面中, 指定与客户端相同的编码
(2) 将客户端页面的编码 设置成 与目标页面编码一致
第二部分: ajax push
在使用ajax POST数据的时候,默认是以 UTF-8 编码发送的,如果目标页面是非UTF-8编码,则unicode字符会出问题
利用 jQuery 的 ajax push 数据, 表单数据的提交,通常下面的两种类似写法:
(1) 自己组合字段和值
var toUrl = '接收数据的页.asp'; var method = 'POST'; var paramSerial = 'name1=值1&name2=值2&name3=值3'; $.ajax({ type: method, url: toUrl, data: paramSerial });
(2) 利用 jQuery 的 serialize() 功能, 自动生成 POST 的组合串
var toUrl = '接收数据的页.asp'; var method = 'POST'; var paramSerial = $('form').serialize(); $.ajax({ type: method, url: toUrl, data: paramSerial });
对于 (1) 的情况,解决起来相对简单,只要将各个值,在提交之前, 用 escape 编码一下即可,如下:
var toUrl = '接收数据的页.asp'; var method = 'POST'; var paramSerial = 'name1=' + escape('值1') + '&name2=' + escape('值2'); $.ajax({ type: method, url: toUrl, data: paramSerial });
经过 escape 编码后, 上面的 paramSerial 的 UTF-8 编码结果 和 paramSerial 本身是相同的,这样,在目标页面,就不用费心去做编码转换了,需要做的,只是 unescape 一下, 而 Asp 本身是支持 escape 和 unescape 的, 在 后台Asp页面中,处理接收到的数据,如下:
<% Response.Charset = "GB2312" Dim n1, n2 n1 = unescape(Request.Form("name1")) n2 = unescape(Request.Form("name2")) %>
对于 (2) 的情况, 比较麻烦了, 如下:
通过查看 jQuery 的源代码,我们可以看到,serialize 的内部实现逻辑是通过 jQuery.param 结合 serializeArray() 来实现的, 见下图:
通过 param 的实现方式,我们可以看到, serialize 实际是对 表单元素的 name 和 value 做了
经过上面的转换, 在经过 UTF-8 编码, 最后的结果是面目全非了
建议大家,采用 (1) 的方式为好。
文章出处:真有意思网(http://www.zu14.cn)
引用地址:点击复制本文的 Trackback Url
文章链接:http://www.zu14.cn/2008/12/06/asp_jquery_ajax/ [复制] (转载请注明出处及链接)










ok.need java?
@gambling casino :
thanks!
Nice site really!
猫哥测试了,我们就照用了啊。