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.ui.draggable中文文档
Nov 24 Javascript
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 Javascript
jquery衣服颜色选取插件效果代码分享
Aug 28 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
jquery实用技巧之输入框提示语句
Jul 28 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
Vue-router 类似Vuex实现组件化开发的示例
Sep 15 Javascript
仿京东快报向上滚动的实例
Dec 13 Javascript
微信小程序在线客服自动回复功能(基于node)
Jul 03 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
Aug 28 Javascript
关于vue 结合原生js 解决echarts resize问题
Jul 26 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
mysql时区问题
2008/03/26 PHP
一个php导出oracle库的php代码
2009/04/20 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
用js来解决ajax读取页面乱码
2010/11/28 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
vue使用监听实现全选反选功能
2018/07/06 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python生成随机红包的实例写法
2019/09/02 Python
python文件操作的简单方法总结
2019/11/07 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
Python 如何批量更新已安装的库
2020/05/26 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
教师年度考核自我鉴定
2014/01/19 职场文书
文化建设工作方案
2014/05/12 职场文书
服务行业演讲稿
2014/09/02 职场文书
初中学习计划书范文
2014/09/15 职场文书
详细的本科生职业生涯规划范文
2014/09/16 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
mysql 排序失效
2022/05/20 MySQL