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 相关文章推荐
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
Apr 10 Javascript
基于jquery的回到页面顶部按钮
Jun 27 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
Dec 31 Javascript
jquery 实现密码框的显示与隐藏示例代码
Sep 18 Javascript
js实现遮罩层弹出框的方法
Jan 15 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
Aug 21 Javascript
详解js中构造流程图的核心技术JsPlumb
Dec 08 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
Vue组件和Route的生命周期实例详解
Feb 10 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
Mar 14 Javascript
JavaScript 接口原理与用法实例详解
May 12 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操作mongoDB实例分析
2014/12/29 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
pyqt4教程之widget使用示例分享
2014/03/07 Python
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python获取央视节目单的实现代码
2015/07/25 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
2014政务公开实施方案
2014/02/19 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
计算机系本科生求职信
2014/05/31 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
2014年话务员工作总结
2014/11/19 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
美术教师个人总结
2015/02/06 职场文书
2016继续教育研修日志
2015/11/13 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL