ashx文件获取$.ajax()方法发送的数据


Posted in Javascript onMay 26, 2016

今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是我在$.ajax方法中指明了"contentType: 'application/json; charset=utf8'",所以才导致了在ashx文件中处理请求时无法获取传递到服务器端的参数,

正确的写法如下:

$.ajax({
url: '/Handler.ashx?operFlag=test',
type: 'POST',
/*
请求ashx文件的时候 要把contentType去掉,还有就是
data 格式为 {”key”,”value”};切记 不要再 大括号外面加双引号,
这样就会在ashx页面取不到数据而失败
*/
//contentType: 'application/json; charset=utf',
data: {
"key": "xdp",
"key":"孤傲苍狼" 
},
cache: false,
dataType: 'text',
success: function (data) {
alert(data);
},
error: function (xhr) {
alert("出现错误,请稍后再试:" + xhr.responseText);
}
});

这样在ashx文件中就可以使用如下的代码来获取$.ajax方法传递的参数了,代码如下:

string key = context.Request["key"];
string key = context.Request["key"];

以前一直都是用$.post方法来处理ajax,所以没有注意到这个问题,而这次由于是项目需要,所以就使用了$.ajax,没想到就遇到了上述的问题,好在找出了问题所在并且及时解决了问题。

另外,最近还遇到了一个奇怪的问题,"用ajax提交数据到ashx后,用JSON.stringify格式化参数后在服务器端取不到值?",代码如下:

$.ajax({
url: '/Handler.ashx?operFlag=test',
type: 'POST',
//JSON.stringify格式化参数
data: JSON.stringify({
"key": "xdp-gacl",
"key": "白虎神皇"
}),
contentType: 'application/json; charset=utf',
cache: false,
dataType: 'json',
success: function (data) {
alert(data.key + "|" + data.key);
},
error: function (xhr) {
alert("出现错误,请稍后再试:" + xhr.responseText);
}
});

结果在ashx中使用context.Request["key3"]这种常规的方式是获取不到参数的,如下图所示:

ashx文件获取$.ajax()方法发送的数据

郁闷了好久,怎么也想不明白为什么会这样,一开始以为是多了contentType: 'application/json; charset=utf8'这句代码造成的,于是把这句代码注释掉:

$.ajax({
url: '/Handler.ashx?operFlag=test',
type: 'POST',
//JSON.stringify格式化参数
data: JSON.stringify({
"key": "xdp-gacl",
"key": "白虎神皇"
}),
//contentType: 'application/json; charset=utf',
cache: false,
dataType: 'json',
success: function (data) {
alert(data.key + "|" + data.key);
},
error: function (xhr) {
alert("出现错误,请稍后再试:" + xhr.responseText);
}
});

可是结果还是一样的,使用context.Request["key3"]还是获取不到参数,没办法,既然常规的方式获取不到,那就另寻他法吧,百度了一下,找到了解决办法,在ashx中使用如下的方式就可以获取到了,首先写一个通用的获取参数的方法,代码如下:

/// <summary>
/// 获取参数
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
private Dictionary<String, Object> GetParameter(HttpContext context)
{
StreamReader reader = new StreamReader(context.Request.InputStream);
//得到json字符串:strJson={"key":"xdp-gacl","key":"白虎神皇"}
String strJson = HttpUtility.UrlDecode(reader.ReadToEnd());
JavaScriptSerializer jss = new JavaScriptSerializer();
//将json字符串反序列化成一个Dictionary对象
Dictionary<String, Object> dicParameter = jss.Deserialize<Dictionary<String, Object>>(strJson);
return dicParameter;
}

GetParameter方法返回一个dicParameter对象,dicParameter就存放了从$.ajax方法中提交到ashx中的参数,如下图所示:

ashx文件获取$.ajax()方法发送的数据

这样就可以从dicParameter中取出传递过来的参数作处理了,完整代码如下:

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string operFlag = context.Request["operFlag"];
if (operFlag == "test")
{
string key = context.Request["key"];
string key = context.Request["key"];
string resStr = key + "|" + key;
context.Response.Write(resStr);
}
else if (operFlag == "test")
{
Dictionary<String, Object> dicParameter = GetParameter(context);
string key = dicParameter["key"].ToString();
string key = dicParameter["key"].ToString();
string resStr = "{\"key\":\"" + key + "\", \"key\":\"" + key + "\"}";
context.Response.Write(resStr);
}
}

以上所述是小编给大家介绍的ashx文件获取$.ajax()方法发送的数据,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
自己动手开发jQuery插件教程
Aug 25 Javascript
window.parent与window.openner区别介绍
Apr 12 Javascript
JavaScript代码复用模式实例分析
Dec 02 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
May 27 Javascript
jquery实现网页定位导航
Aug 23 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
详解jQuery中的DOM操作
Dec 23 Javascript
jQuery实现全选、反选和不选功能
Aug 16 jQuery
vue使用监听实现全选反选功能
Jul 06 Javascript
axios取消请求的实践记录分享
Sep 26 Javascript
vue 实现 rem 布局或vw 布局的方法
Nov 13 Javascript
js操作数据库实现注册和登陆的简单实例
May 26 #Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 #Javascript
轻松掌握JavaScript中的Math object数学对象
May 26 #Javascript
JS表格组件神器bootstrap table详解(强化版)
May 26 #Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 #Javascript
JavaScript的String字符串对象常用操作总结
May 26 #Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
May 26 #Javascript
You might like
Windows下的PHP5.0安装配制详解
2006/09/05 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
php操作mongoDB实例分析
2014/12/29 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
js简易版购物车功能
2017/06/17 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
用Python解析XML的几种常见方法的介绍
2015/04/09 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
python for 循环获取index索引的方法
2019/02/01 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
python函数超时自动退出的实操方法
2020/12/28 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
JAVA和C++的区别
2013/10/06 面试题
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
生物化工工艺专业应届生求职信
2013/10/08 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
中专生职业生涯规划书范文
2014/01/10 职场文书
诚信考试倡议书
2014/04/15 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书