首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

jquery ajax+json(插件) 提交数据,让人捉摸不透的是:【部分中文显示问号】,该怎么解决

2012-05-27 
jquery ajax+json(插件)提交数据,让人捉摸不透的是:【部分中文显示问号】各位网友:目前碰到一个棘手的难题,

jquery ajax+json(插件) 提交数据,让人捉摸不透的是:【部分中文显示问号】
各位网友:
目前碰到一个棘手的难题,使用json格式封装页面数据提交到action,没有用表单,而是直接使用js获取数据,组织成json格式字符串,通过jquery的ajax功能提交到action中(请不要说为什么不用表单)。需求很明了。
1。组织数据封装到js对象

JScript code
function doActive(kind,group,state,model,speed,settemp,lock){    this.fkind=kind;    this.fgroup=group;    this.fstate=state;    this.fmodel=model;    this.fspeed=speed;    this.fsettemp=settemp;    this.flock=lock;}

2。获取数据填充到js对象并组织成json格式
JScript code
    var states=$("#New_fstate").val();        var model=$("#New_fmodel").val();        var speed=$("#New_fspeed").val();        var settemp=$("#New_fsettemp").val();        var lock=$("#New_flock").val();        var myData=new doActive(kindsArray,groupsArray,states,model,speed,settemp,lock);            alert($.toJSON(myData));    $.ajax({             type:"post",             url:"groupControl.do?operate=doAdd",             data:$.toJSON(myData),                         dataType:"text",             contentType:"application/json;charset=UTF-8",             error:function(XmlHttpRequest, textStatus, errorThrown){                 alert("操作异常" + XmlHttpRequest.responseText);             },             success:function(data){                 if(data==1){                    showMsg("操作完成",4000,"success");                }else{                                    showMsg("操作异常",4000,"error");                }                             }               });

其中 alert打印结果是
JScript code
{"fkind":["张三","李四"],"fgroup":"["王五","赵七"]","fstate":""}

说明发送格式正确

3。action接收数据
Java code
BufferedReader br = new BufferedReader(new InputStreamReader(                    (ServletInputStream) request.getInputStream()));            String line = null;            StringBuilder sb = new StringBuilder();            while ((line = br.readLine()) != null) {                sb.append(line);            }            String d=sb.toString();            //d=new String(d.getBytes("GB2312"),"UTF-8");             JSONObject jsonObj = JSONObject.fromObject(d);


最后打印json字符串,结果出现 部分中文显示 问号 也就是说 有的中文能显示,有的就是问号。
本人已经进行了相应的转码工作,但是没有用,实在是没地方想了,请各位提示一下,该往哪方面考虑
这是怎么会发生的。

[解决办法]
再仔细看看什么样的中文正常显示,哪些不能正常显示.发上来大家帮你想想.汉字之间有没有空格,换行或其他符号.
[解决办法]
function doSubmit(){
//{"fkind":["张三","李四"],"fgroup":"["王五","赵七"]","fstate":""}
var variable = {};
variable.fkind = [encodeURI("张三"),encodeURI("李四")];
variable.fgroup = ["王五","赵七"];
variable.fstate = "";
alert($.toJSON(variable));
$.ajax({
type:"post",
url:"<%=request.getContextPath()%>/servlet/AjaxTestServlet",
data:$.toJSON(variable),
dataType:"text",
contentType:"application/json;charset=UTF-8",
error:function(XmlHttpRequest, textStatus, errorThrown){


alert("操作异常" + XmlHttpRequest.responseText);
},
success:function(data){
if(data==1){
//showMsg("操作完成",4000,"success");
alert(1);
}else{
//showMsg("操作异常",4000,"error");
alert(2);
}
}
});
}




=====================================
BufferedReader br = new BufferedReader(new InputStreamReader((ServletInputStream) request.getInputStream()));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
String d=sb.toString();
d = URLDecoder.decode(d,"UTF-8");
System.out.println(d);
[解决办法]
页面中用js提供的内置编码函数encdoeURL()对提交的中文进行编码,servlet中再用4楼的方法
d = URLDecoder.decode(d,"UTF-8");
解码即可得到正确的中文
[解决办法]

探讨

多谢各位相助,我要根据楼上的代码进行验证,并找原因,谢

热点排行