您的位置:首页 > Web前端 > JQuery

JQuery向ashx提交中文参数方案 [转]

2015-03-24 09:38 260 查看
转自:/article/1649822.html

字符编码这个东西,一旦和中文打上交道就不可避免出现乱码,今天项目用到了JQuery向ashx提交中文参数的这一块,折腾了一天,开始是各种乱码,最后中算弄好了。

客户端:

[javascript] view plaincopyprint?

//异步获取数据

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','');


服务器端:

[csharp] view plaincopyprint?

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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: