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 Dialog 弹出层对话框插件
Aug 09 Javascript
JQuery的read函数与js的onload不同方式实现
Mar 18 Javascript
jQuery 动态云标签插件
Nov 11 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
Jun 03 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
JS中实现隐藏部分姓名或者电话号码的代码
Jul 17 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
May 28 Javascript
ES6箭头函数和扩展实例分析
May 23 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摘要生成函数(无乱码)
2012/02/04 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
php数组查找函数总结
2014/11/18 PHP
javascript IFrame 强制刷新代码
2009/07/23 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
实例讲解React 组件
2020/07/07 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
python生成日历实例解析
2014/08/21 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python让函数不返回结果的方法
2020/06/22 Python
python中字符串的编码与解码详析
2020/12/03 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
孝老爱亲模范事迹
2014/01/24 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
党风廉正建设责任书
2015/01/29 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
python中tkinter复选框使用操作
2021/11/11 Python
HTML中的表格元素介绍
2022/02/28 HTML / CSS
mysql数据库隔离级别详解
2022/06/16 MySQL