关于jQuery Mobile 使用后的乱码问题

wsg 发布于 2012/04/03 11:39
阅读 6K+
收藏 0

页面原来都不是UTF-8的,用了jQuery Mobile后,获取页面提交上来的数据时,都变成乱码了。

测试了一下,发现原因是提交上来的数据已经被自动被编码变成了UTF-8的。估计是在提交的时候被自动转的。

请问,可以设置为 按页面默认编码格式提交吗?

加载中
0
旧城的骁珖
wsg
wsg
@普华之光 : 谢谢。这会儿不方便上QQ。等能上时我加你啊。 暗号就用“龙门飞甲”吧^_^
旧城的骁珖
旧城的骁珖
@wsg : 联系QQ 2289688859
wsg
wsg
@普华之光 : 现在的问题是,就算是contentType,我也不知道该怎么设置,该在哪里写,写什么啊。
旧城的骁珖
旧城的骁珖
@wsg : 是这个么 contentType的值么
wsg
wsg
@普华之光 : 我也觉得他应该提供了指定charset的地方。 可是查了好久就是查不出来到底该在什么地方设置这个charset。
下一页
0
wsg
wsg
。。。。。。
0
wsg
wsg

来人啊。。。

0
红薯
红薯
#jquery mobile# 就是一个ui框架,我就不明白为什么会有乱码问题,绝对没有的事,有也不是它引起的,搞清楚这一点才能找到问题所在
wsg
wsg
jQuery Mobile会自动地尽可能地把提交事件用ajax来完成。 这个ajax提交的时候,默认的编码格式是UTF-8的。 我的页面编码不是UTF-8的。所以会乱码。 ---这样说来,好像不是jQuery Mobile,而是jQuery的问题。 ---不过,我也不太清楚。
0
山哥
山哥
jQuery MObile的效率真的是一个问题。
wsg
wsg
刚开始用,还没感觉那么深。 ---先解决乱码再说吧。
0
程明东
程明东
多看看官方文档吧
contentType:
Default: 'application/x-www-form-urlencoded'
When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
0
程明东
程明东

引用来自“程明东”的答案

多看看官方文档吧
contentType:
Default: 'application/x-www-form-urlencoded'
When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
这个是默认的,也就是你不写此项也是这样的默认值
0
程明东
程明东

引用来自“程明东”的答案

引用来自“程明东”的答案

多看看官方文档吧
contentType:
Default: 'application/x-www-form-urlencoded'
When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
这个是默认的,也就是你不写此项也是这样的默认值
 function goAjax()
         {
          var result = jQuery.ajax({
                 url: "ajax.jsp",
                 type:"POST",
	         contentType:"application/x-www-form-urlencoded;charset=UTF-8",
                 async: false,
                 data:{txt:form1.txt.value},
                  success: function(htmlVal)
                  {
                      
                  }
              }).responseText;
              
              alert(result);
         }

contentType这个值是特定的,charset自动编码为UTF-8,即使你想修改也是无用的,W3C里有这样的说明:

The default value for this attribute is "application/x-www-form-urlencoded". The value"multipart/form-data" should be used in combination with the INPUT element,type="file".

The webbrowser will take care about URL encoding automatically.

wsg
wsg
我的英文不是很好,七八年前考了五次四级才勉强考过去。所以看英文很吃力。而且,看完后自己都不敢肯定自己理解对了没有。 ----你给我发的这段英文,再加上你的解释,是不是说,我不管设置不设置,都会以UTF-8的格式提交呢?----就算我想以GBK提交,也是不可能的,是这样的意思吗? ----谢谢你的回复,也希望能帮我再解释一下。
0
程明东
程明东

引用来自“程明东”的答案

引用来自“程明东”的答案

引用来自“程明东”的答案

多看看官方文档吧
contentType:
Default: 'application/x-www-form-urlencoded'
When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
这个是默认的,也就是你不写此项也是这样的默认值
 function goAjax()
         {
          var result = jQuery.ajax({
                 url: "ajax.jsp",
                 type:"POST",
	         contentType:"application/x-www-form-urlencoded;charset=UTF-8",
                 async: false,
                 data:{txt:form1.txt.value},
                  success: function(htmlVal)
                  {
                      
                  }
              }).responseText;
              
              alert(result);
         }

contentType这个值是特定的,charset自动编码为UTF-8,即使你想修改也是无用的,W3C里有这样的说明:

The default value for this attribute is "application/x-www-form-urlencoded". The value"multipart/form-data" should be used in combination with the INPUT element,type="file".

The webbrowser will take care about URL encoding automatically.

对的,default  是 contentType:"application/x-www-form-urlencoded;charset=UTF-8", 即使你改成

 contentType:"application/x-www-form-urlencoded;charset=GBK",也没用的,你可以在提交后用日志打印出来看结果。

index.jsp:

<%@page contentType="text/html" pageEncoding="gb2312"  %>
<html>
    <head>
        <meta>
        <title> 测试jQuery Ajax编码</title>
        <script type="text/javascript" src="js/jquery-1.7.2.min.js" ></script>
        <script type="text/javascript">
            
         function goAjax()
         {
          var result = jQuery.ajax({
                 url: "ajax.jsp",
                 type:"POST",
			     contentType:"application/x-www-form-urlencoded;charset=GBK",
                 async: false,
                 data:{txt:form1.txt.value},
                  success: function(htmlVal)
                  {
                      
                  }
              }).responseText;
              
              alert(result);
         }
            
        </script>
    </head>
    <body>
        <form name="form1" >
        <input type="text" name="txt"  /><br>
         <input type="button" value="Click Me" onClick="goAjax();" />
        </form>
    </body>
</html>


ajax.jsp:
<%@page contentType="text/html" pageEncoding="gb2312"  %>
<% 
   //jQuery Ajax的post请求为UTF-8(参阅官方contentType:"application/x-www-form-urlencoded")
   //在服务端自己解码
   request.setCharacterEncoding("UTF-8");
 
 
  
   String txt = request.getParameter("txt"));
   out.print("contentType="+request.getContentType()+"|post variable is:"+  txt );
%>


你自己测试看输出吧,“contentType=”依旧为: application/x-www-form-urlencoded;charset=UTF-8

wsg
wsg
@程明东 : 嗯。我一直在动手试。一直没有能够改掉。 我以为这么好的一个jQuery应该不会在这个地方把这个地方弄得这么死,肯定是我没有找对方法。所以来问大家了。 现在看来真的是改不了了。
程明东
程明东
@wsg : 你不可能改变编码的,就是UTF-8,改了也无效;你自己可以动手试试,多动手实践
wsg
wsg
或许,我理解错你的意思了。 我重述一下我对你的回复内容的理解啊。你的意思是不是说:用 "修改contentType" 的方法是改变不了提交时的编码格式的。是这样吧? 这样的话,是不是说,通过其他的方法("修改contentType" 之外的方法),是有可能改变提交时的编码格式的呢?
wsg
wsg
谢谢你啊。花这么多心思给我这么多代码示例。 我下去把你给我的信息好好研究一下。 多谢了!
0
C
ClimberYang
我用<meta charset="gbk"/>解决了一次乱码问题。我用的是1.1.0
返回顶部
顶部