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动态创建Table,Tr,Td并赋值的具体实现
Jul 05 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
Dec 15 Javascript
你所未知的3种Node.js代码优化方式
Feb 25 Javascript
js 实现一些跨浏览器的事件方法详解及实例
Oct 27 Javascript
浅谈Node.js:理解stream
Dec 08 Javascript
js实现文本上下来回滚动
Feb 03 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
Jul 12 Javascript
javascript实现左右缓动动画函数
Nov 25 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 str_pad 函数用法简介
2009/07/11 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
Open and Print a Word Document
2007/06/15 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
js创建对象的方式总结
2015/01/10 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
js实现表格数据搜索
2020/08/09 Javascript
python基础教程之面向对象的一些概念
2014/08/29 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
python如何重载模块实例解析
2018/01/25 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
Django多数据库的实现过程详解
2019/08/01 Python
python groupby 函数 as_index详解
2019/12/16 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
人力资源专业推荐信
2013/11/29 职场文书
创业大赛策划书
2014/03/01 职场文书
高一新生军训方案
2014/05/12 职场文书
房地产推广策划方案
2014/05/19 职场文书
简单租房协议书
2014/10/21 职场文书
土建技术员岗位职责
2015/04/11 职场文书
员工年度工作总结2015
2015/05/18 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
Tomcat配置访问日志和线程数
2022/05/06 Servers
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技