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 08 Javascript
Javascript 同时提交多个Web表单的方法
Feb 19 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
JavaScript 继承机制的实现(待续)
May 18 Javascript
更优雅的事件触发兼容
Oct 24 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
JavaScript从数组中删除指定值元素的方法
Mar 18 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
js+HTML5实现视频截图的方法
Jun 16 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
详解webpack 最简打包结果分析
Feb 20 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
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
php常用表单验证类用法实例
2015/06/18 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
python3.5的包存放的具体路径
2020/08/16 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
乌鸦喝水教学反思
2014/02/07 职场文书
服务行业口号
2014/06/11 职场文书
先进员工事迹材料
2014/12/20 职场文书