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 相关文章推荐
二级域名转向类
Nov 09 Javascript
javascript入门·对象属性方法大总结
Oct 01 Javascript
jQuery 三击事件实现代码
Sep 11 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
AngularJS入门教程之双向绑定详解
Aug 18 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
JavaScript数组迭代方法
Mar 03 Javascript
VUE实现日历组件功能
Mar 13 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
iview中Select 选择器多选校验方法
Mar 15 Javascript
原生JS实现留言板功能
Feb 08 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中防止SQL注入实现代码
2011/02/19 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
js中的json对象详细介绍
2014/10/29 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
前端性能优化及技巧
2016/05/06 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
跟老齐学Python之再深点,更懂list
2014/09/20 Python
python绘图方法实例入门
2015/05/19 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
Python configparser模块常用方法解析
2020/05/22 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
Django实现随机图形验证码的示例
2020/10/15 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
如何写一封打动人心的求职信
2014/02/17 职场文书
家长写给老师的建议书
2014/03/13 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
学生干部培训方案
2014/06/12 职场文书
天河观后感
2015/06/11 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
redis复制有可能碰到的问题汇总
2022/04/03 Redis