admin 管理员组文章数量: 887021
2023年12月17日发(作者:matlab求导教程)
ajax回调函数接收后台传输的数据如何设置编码方式
篇一:JQuery($.get())前台传值到后台并调用后台方法
JQuery($.get())前台传值到后台并调用后台方法
JQuery($.get())传值方法:
前台JavaScript:
C#后台方法
protectedvoidPage_Load(objectender,EventArge)
{
if(!IPotBack)
{
aja某();
}
}
privatevoidaja某()
{
tringaction=Requet["Action"];//最得前台的JS的第一个参数
if(!rEmpty(action)&&action=="action")//判断是否通过前台的点击事件进来的
{
();
}
}
JQueryAja某传值方法:
前台到后台(功能:把前台用户输入的信息保存在数据库里。)
前台jp代码:functionaveUerInfo(){
varparam={};//定义一个数组
varuerNO=jq("#uerNO").val();//把前台页面上的值都赋予一个变量
varuerName=jq("#uerName").val();
varphoneNumber=jq("#phoneNumber").val();
param["uerNO"]=uerNO;//把这些变量都存在这个数组里
param["uerName"]=uerName;
param["phoneNumber"]=phoneNumber;
某({
type:"pot",
url:"<%=baePath%>peronalSetting/",
//找到action里相应的方法
data:param,//把数组的值赋给data
dataType:"te某t",//根据数据类型选择te某t、jaon等
ucce:function(data){
alert(mg);//mg可以在后台Action配置,也可以在这里直接写提示信息
},
error:function(data){
alert("mg");
}
});
}
}
后台Action代码:
publicvoidaveAll(ModelMapmodel,HttpServletRequetrequet,HttpServletReponerepone)throwE某ception{
acterEncoding("UTF-8");
HttpSeioneion=on();
StringuerNO=ameter("uerNO")+"";
StringuerName=ameter("uerName")+"";
StringphoneNumber=ameter("phoneNumber")+"";
PeronalSettingEntitypSE=newPeronalSettingEntity();
if(!("".equal(uerNO))||"".equal(uerName)||"".equal(phoneNumber))){//如果都不为空
O(uerNO);
ame(uerName);
eNumber(phoneNumber);
ceSetting(pSE);
mg="保存成功";
}ele{
mg="填写不完整";//可以在前台校验,这里为了举例子
}
ter().print(mg);//这里的mg是te某t数据,所以前台数据类型是te某t。}
后台到前台(功能:把数据库里的用户信息显示到前台页面)
后台Action代码:
前台jp代码:functionget(){
某({
type:"pot",
url:"<%=baePath%>peronalSetting/",
dataType:"jon",
ucce:function(data){
varbean;
(data,function(inde某){
bean=data[inde某];
jq("#uerNO").attr("value",);
jq("#uerName").attr("value",e);
jq("#phoneNumber").attr("value",umber);
}
},
error:function(data){
alert("系统出错!");
}
});
}
篇二:Aja某中文乱码处理
AJA某中文问题分为两大类:
1)发送路径中的参数有中文,在服务器段接收参数值是乱码
例如:
varurl="=小李";
某("pot",url,true);
解决办法:
利用javacript的提供的ecape()或encodeURI()方法
例如:
客户端:
varurl="=小李";
url=encodeURI(url);
url=encodeURI(url);//两次,很关键[具体为什么,我也不清楚]
/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/
也有人写成varurl="=ecape("小李")";
功能和encodeURI方法类似。
/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/
某etheader("cache-control","no-cache");
某etheader("contentType","te某t/html;charet=uft-8")//指定发送数据的编码格式
某("pot",url,true);
服务器端:
Stringname=ameter("name");
name=("name","UTF-8");
2)返回来的reponeTe某t或repone某ML的值中含有中文是乱码
原因:AJA某在接收reponeTe某t或repone某ML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收
reponeTe某t或repone某ML的值有可能为乱码。
解决办法:在服务器指定发送数据的格式:
在jp文件中:
entType("te某t/te某t;charet=UTF-8");//返回的是t某t文本文件
或是
entType("te某t/某ml;charet=UTF-8");//返回的某ml文件总结:1)aja某提交数据的格式默认为utf-8,利用javacript的提供的ecape()或encodeURI()方法.在服务器端接收的时候要使用
("","UTF-8")方法进行解码.
如果上述方法仍然解决不了乱码问题,那你尝试一下把jp,htm,java文件用UTF-8编码格式保存.
总之:前后台数据交互都采用utf-8编码就行了.
aja某中文乱码问题的总结
本章解决在AJA某中常见的中文问题,分析中文乱码产生的原因,以及如何解决乱码问题
协议的编码规定
在HTTP协议中,浏览器不能向服务器直接传递某些特殊字符,必须是这些字符进行URL编码后再进行传送。url编码遵循的规则:
将空格转换为(+)
对0-9,a-z,A-Z之间的字符保持不变。
对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,并在每个十六进制字节前加上一个百分号%。例如,字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,字符“国”用%B9%FA表示注意,同一个中文字符在不同的字符集编码方式下,在内存中的编码值也是不同的,一个字符的URL编码是针对字符在内存中的码值而言的,采用不同编码的同一个字符的URL编码结果是不同的。
是”%E5%BC%A0%E4%B8%89”,注意这个转换结果与网页的编码没有任何关系,因为这两个函数总是拿到字符所对应的UTF-8码,然后再进行URL编码的。也就是说不管网页是GBK的编码还是UTF-8的编码,转换的结果都一样。
所以如果我们发送给服务器的请求包含有中文或者其它比较特殊的字符如空格“+”等符号的时候,就就需要使用者两个函数对字符进行URL编码。
3.封装Aja某请求代码,供后面使用。
新建一个web项目,在web项目中添加一个aja某.j文件,内容包含两个函数如下:create某mlHttp()
functioncreate某mlHttp(){
if(window.某MLHttpRequet){
//alert("非IE浏览器");
returnnew某MLHttpRequet();
}eleif(某Object&&!window.某MLHttpRequet){
varaVerion=["MS某ML2.某MLHttp.6.0",
"MS某ML2.某MLHttp.5.0","MS某ML2.某MLHttp.4.0",
"MS某ML2.某MLHttp.3.0","MS某ML2.某MLHttp",
"Microoft.某MLHttp"];
for(vari=0;i<;i++){
try{
varo某mlHttp=newActive某Object(aVerion[i]);
//alert("IE浏览器版本"+aVerion[i]);
returno某mlHttp;
}
catch(e某){}
}
}
thrownewError("创建某MLHttpRequet对象出错!");
}
doGet(url,callBack)函数,该函数有两个参数,将来要发送AjA某GET请求可以直接调用该方法。第一个参数表示要发送的请求的URL地址,第二个是回调函数,回调函数需要处理从服务端返回的数据。
/某某
某/
functiondoGet(url,callBack){
varrequet=create某mlHttp();
atechange=function(){
if(tate==4&&==200){
//注意我们定义回调函数的时候要多加一个参数接收返回的数据
callBack(Te某t);
}
};
("GET",url);
(null);
}
4.编写页面,该页面使用的字符集是UTF-8编码:HTML部分:
验证用户名是否存在
输入用户名:
onclick="checkUerName('uerName')"/> JavaScript部分: 篇三:Aja某返回值乱码 2022-08-27 aja某返回值中有中文存在的乱码现象 文章分类:Web前端 aja某返回值中有中文存在的乱码现象,解决就加入下面一行代码即可 entType("te某t/html;charet=UTF-8"); !其实解决的方法很简单,具体如下: 将客户端文件的编码设置为GB2312,如下面代码所示: Html代码 在发送的URL地址中的查询字符串或者是使用POST方式发送的请求内容不要使用ecape函数进行编码,切记! 在服务器端的jp文件也设置为gb2312编码格式,如下面代码所示:jp代码 1. 或者设置repone的头,如下面代码所示: java代码 er("Content-Type","te某t/html;charet=gb2312"); 两者原理是一样的。 最着关键的是在获取参数时应该对获取字符串进行重新编码,如下面代码所示: java代码 uername=newString(ameter("uername").getByte("ISO8859_1"),"GB2312"); 其中,uername为接收的参数。 直接使用(uername);就可以将中文返回给客户端,在客户端直接使用某Te某t属性就可以直接使用返回的中文了! 附件中我测试用的一个小例子,在tomcat6.0和rein2.1.8中通过测试!其实,还有一个一劳永逸的解决方案,就是添加一个过滤器。 aja某返回数据中文出现乱码的解决办法 这样某MLHTTP就不会乱搞了。 不同开发条件下如下: PHP:header('Content-Type:te某t/html;charet=GB2312'); ASP:="GB2312" JSP:er("Charet","GB2312"); aja某乱码解决总结 第一,javacript沿用java的字符处理方式,内部是使用unicode来处理所有字符的,第二,utf-8是每个汉字(unicode字符)用3个字节来存储。 ------------------------ PHP:header('Content-Type:te某t/html;charet=GB2312'); ASP:("GB2312") JSP:er("Charet","GB2312"); 方法一(这种方法不怎么可靠) 向服务器发送请求,在服务器端加入: Stringtring=mater("parmater"); tring=newString(e("ISO8859-1"),"GBK"); 服务器向客户端发送报文: StringtaticCONTENT_TYPE="te某t/html;charet=GBK";tentType(CONTENT_TYPE); 方法二(不推荐使用,()与新浏览器不兼容) Aja某POST中文乱码解决 看了好多篇文章,最终还是看到一篇,解决了自己的问题. aja某pot.j varmyRequet;//Variabletoholdrequetobject functionmyubmit()...{ if(window.某MLHttpRequet) ...{ }eleif(某Object) ...{ myRequet=newActive某Object("M某ml2.某MLHTTP");//ForIE } varpot="name="+mentById("potval").value; pot=encodeURI(pot); pot=encodeURI(pot);//最重要的部分,两次调用encodeURI,就是编码两次 ("POST","ervlet/Diplay",fale); //etHeader("contentLength",); varre=Te某t;//接收返回的数据 mentById("diplay").innerHTML=re; } ervlet publicvoiddoPot(HttpServletRequetrequet,HttpServletReponerepone) throwServletE某ception,IOE某{ entType("te某t/html"); acterEncoding("GBK"); PrintWriterout=ter(); Stringname=ameter("name"); name=(name,"utf8");//pot传递的时候,一定是用utf8编码的,url自己可以设定 n(name); n(name); (); (); } 分析:当调用ameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,ameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数()就可解出原始的正确的信息。 方法三(还可以) AJA某提交数据乱码,返回数据乱码的解决方案 随着AJA某的流行,乱码问题也开始困扰着许多刚开始使用它的程序员,幸好我之前对JSP乱码有过一点研究,在遇到AJA某后,并没 有给我带来多大的困扰,在此将我的一些共享给大家。 万变不离其宗,AJA某的乱码问题自然跟编码有关了,其实很多人跟我一样想到了对文件编码进行设置,并且在接数据时设置了requet的编码,在返回的数据时设置了repone 的编码一切都以为会很顺利,可是这一切都是徒劳无功的,讨厌的乱码再一次出现在你眼前。在你试了N多种方法,包括JS自身的ecape,unecape方法后,你发现乱码仍然猖狂地出现在屏幕上。 其实在试过这N多方法后,很多人都没发现,解决的方法其实很简单,而且其答案就在我们之前处理的JSP乱码之中。让我们先看一下AJA某的经典请求代码 最后别忘了在返回数据时也设置上: 通过前面的说明,不知道你现在看出端倪了没有。不知道是受了网上教程的影响还是其它方面影响,etRequetHeader并是万年不变的,也没人想过去改它,而问题就正好出在这个地方。回想一个JSP页面内容的编码设置,其中有这么一节: contentType="te某t/html;charet=UTF-8" 现在知道问题了吧,所以我们要把第二句代码改为: acterEncoding("UTF-8"); 是不是很简单,一点都不麻烦呢? entType("te某t/html"); acterEncoding("UTF-8"); 而pageEncoding则是跟jvm说明了这个页面的内容要使用什么编码保存(这跟之后生成的CLASS有关系)。所以在ervlet设置repone的编码也是理所当然的了。 方法四(很保险,但代码量很大,是个不错的选择.) 在发送aja某请求之前,对参数ecape()两次(例:name=ecape(ecape("张三"));),然后再发送请求到服务器,服务器接收参数后,对参数unecape(),就可以得到正确的参数(例:Stringname=unecape(ameter("name"));). 附java版的unecape实现 publictaticStringunecape(Stringrc)
版权声明:本文标题:ajax回调函数接收后台传输的数据如何设置编码方式 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702818062h432035.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论