如何出现这种情况?当ajax通过GET或POST方法调用一带参数的URL时,如:
<script type=’text/javascript’>
url=”xx.asp?a=”+aa;
//这里有一个aa的参数,如果aa的值为英文或数字就没问题,如果aa的值为中文的话,IE中有时报错有时正常有时乱码,OP/FF中根本无值返回
xmlhttp.open(“GET”,url,true);
//xmlhttp是一个XMLHttpRequest对象
xmlhttp.send(null);
</script>
如上段代码如注释,当传递的参数为英文或数字时,就能正常与asp后台(如上例中的xx.asp)通信,IE/OP/FF均正常,但如果传递的参数为中文的时候,IE中情况就比较复杂了,有时报js错误;有时通信正常,能正常返回所需值;有时显示为乱码,而OP/FF中就根本无返回值,查看一下FF中的javascript控制台,报错为无数据返回.
于是上CSDN/Baidu/Google中问大侠们,疯狂搜索,结果找的都是java与ajax通信或asp.net与ajax通信(看来这年代asp真的没落了,没什么人用了),大侠问答的我也不会用(后来才晓得回答的是正确的解决方法,只是当时我不会用).足足琢磨了一个星期,不得其解.
如何解决这种问题?后来没办法,拿着ajax与java通信的方法来试一下了,果然很快就OK了.以上面那段代码为例,具体修改如下:
<script type=’text/javascript’>
url=”xx.asp?a=”+escape(aa);
//把aa参数值经过js内部函数escape()加密,就OK了
xmlhttp.open(“GET”,url,true);
//xmlhttp是一个XMLHttpRequest对象
xmlhttp.send(null);
</script>
当然不能如此简单的解决一下,然后在xx.asp中添加一条
<% response.charset=”gb2312″ ‘或response.charset=”GBK” %>
这一句的目的是让asp返回的值为中文兼容字符,现在OK了,不论是ajax向asp传中文参数,还是asp返回中文字符串给ajax,在IE/OP/FF上测试都没问题了,终于大功告成.
最后查一下js的帮助手册,查到escape()方法如下解释:
———————————————————
escape 方法 对 String 对象编码以便它们能在所有计算机上可读,
escape(charString)
必选项 charstring 参数是要编码的任意 String 对象或文字。
说明 escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 “%20” 。
字符值大于 255 的以 %uxxxx 格式存储。
注意
escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。