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实现的网页自动播放声音
Apr 30 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
js实现select跳转功能代码
Oct 22 Javascript
jquery实现弹出层登录和全屏层注册特效
Aug 28 Javascript
js实现跨域的4种实用方法原理分析
Oct 29 Javascript
JavaScript中的函数(二)
Dec 23 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
vue-hook-form使用详解
Apr 07 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
用Axios Element实现全局的请求loading的方法
Mar 15 Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 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+SqlServer实现分页显示
2006/10/09 PHP
详解php协程知识点
2018/09/21 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
python实现一次创建多级目录的方法
2015/05/15 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Python中创建二维数组
2018/10/17 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
python hashlib加密实现代码
2019/10/17 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
Python随机数函数代码实例解析
2020/02/09 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
高分子材料与工程专业推荐信
2013/12/01 职场文书
市场部规章制度
2014/01/24 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
监察建议书范文
2014/03/12 职场文书
同居协议书范本
2014/04/23 职场文书
毕业设计致谢语
2015/05/14 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
数学复习课教学反思
2016/02/18 职场文书