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 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
javascript点击按钮实现隐藏显示切换效果
Feb 03 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
Jan 06 Javascript
JS动态修改网页body的背景色实例代码
Oct 07 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
Feb 20 Javascript
简谈创建React Component的几种方式
Jun 15 Javascript
通过javascript实现段落的收缩与展开
Jun 26 Javascript
微信小程序如何调用新闻接口实现列表循环
Jul 02 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
php设计模式 Delegation(委托模式)
2011/06/26 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
JavaScript 对象、函数和继承
2009/07/07 Javascript
ext jquery 简单比较
2010/04/07 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
使用vue构建移动应用实战代码
2017/08/02 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python函数嵌套实例
2014/09/23 Python
Python实现随机选择元素功能
2017/09/14 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
keras得到每层的系数方式
2020/06/15 Python
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
三八妇女节活动主持词
2014/03/17 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
公司会议策划方案
2014/05/17 职场文书
师范生求职自荐信
2014/06/14 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
SQL注入详解及防范方法
2021/12/06 MySQL