JQuery向ashx提交中文参数方案
转自:http://blog.csdn.net/wangqiuyun/article/details/8450964
字符编码这个东西,一旦和中文打上交道就不可避免出现乱码,今天项目用到了JQuery向ashx提交中文参数的这一块,折腾了一天,开始是各种乱码,最后中算弄好了。
客户端:
- //异步获取数据
- var tpAction=action+‘getSearch.ashx?key=‘+encodeURIComponent(‘中国‘);
- $.getJSON(tpAction,function(rsp){//请求成功
- if(rsp.status==‘1‘){
- var list=rsp.item;
- var len=list.length;
- if(len==0){
- //没有数据直接返回
- setNull();
- return;
- }
- //组装数据
- var s=zy_tmpl(templ,list,len);
- $list.append(s);
- }else{
- alert(‘‘,‘加载数据失败,请重试‘,‘确定‘);
- }
- },‘json‘,function(err){//请求失败
- alert(‘‘,‘加载失败,请检查网络设置!‘,‘确定‘);
- },‘POST‘,‘‘);
//异步获取数据 var tpAction=action+‘getSearch.ashx?key=‘+encodeURIComponent(‘中国‘); $.getJSON(tpAction,function(rsp){//请求成功 if(rsp.status==‘1‘){ var list=rsp.item; var len=list.length; if(len==0){ //没有数据直接返回 setNull(); return; } //组装数据 var s=zy_tmpl(templ,list,len); $list.append(s); }else{ alert(‘‘,‘加载数据失败,请重试‘,‘确定‘); } },‘json‘,function(err){//请求失败 alert(‘‘,‘加载失败,请检查网络设置!‘,‘确定‘); },‘POST‘,‘‘);
服务器端:
- string keyy = context.Request["key"];
- if (keyy != null)
- {
- string key = HttpUtility.UrlDecode(context.Request["key"].ToString());
- //string key = context.Server.HtmlDecode(context.Request.Params["key"].ToString());
- string log = "getSearch.ashx?key=" + key;
- string logsql = "insert into logs(createtime,contents) values(‘" + DateTime.Now.ToString() + "‘,‘" + log + "‘)";
- Sqlbase.ExecuteNonQuery(CommandType.Text, logsql, null);
- //more
- string sql = "select * from news where title like ‘%" + key + "%‘ order by id desc";
- DataTable dt = Sqlbase.ExecuteTable(CommandType.Text, sql, null);
- result rs = new result();
- rs.status = 1;
- rs.msg = "成功";
- rs.item = dt;
- string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(rs);
- context.Response.Clear();
- context.Response.ContentEncoding = Encoding.UTF8;
- context.Response.ContentType = "application/json";
- context.Response.Write(strJson);
- context.Response.Flush();
- context.Response.End();
- }
string keyy = context.Request["key"]; if (keyy != null) { string key = HttpUtility.UrlDecode(context.Request["key"].ToString()); //string key = context.Server.HtmlDecode(context.Request.Params["key"].ToString()); string log = "getSearch.ashx?key=" + key; string logsql = "insert into logs(createtime,contents) values(‘" + DateTime.Now.ToString() + "‘,‘" + log + "‘)"; Sqlbase.ExecuteNonQuery(CommandType.Text, logsql, null); //more string sql = "select * from news where title like ‘%" + key + "%‘ order by id desc"; DataTable dt = Sqlbase.ExecuteTable(CommandType.Text, sql, null); result rs = new result(); rs.status = 1; rs.msg = "成功"; rs.item = dt; string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(rs); context.Response.Clear(); context.Response.ContentEncoding = Encoding.UTF8; context.Response.ContentType = "application/json"; context.Response.Write(strJson); context.Response.Flush(); context.Response.End(); }
这里根本就没有进行什么编码设置,其实就是JS用encodeURIComponent()对中文字符串编码,C#用HttpUtility.UrlDecode(context.Request["key"].ToString())进行解码,是不是很简单呢!可是我一天的实践证明:JS端用encodeURIComponent()要比escape()好多了,至于区别大家可以google一下,C#的解码函数也一堆,像什么Server.UrlDecode之类的,但是推荐使用HttpUtility.UrlDecode(),好处大家同样也可以google!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。