ashx文件获取$.ajax()方法发送的数据

今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是我在$.ajax方法中指明了"contentType: 'application/json; charset=utf8'",所以才导致了在ashx文件中处理请求时无法获取传递到服务器端的参数

正确的写法如下:

 1 $.ajax({
2 url: '/Handler1.ashx?operFlag=test1',
3 type: 'POST',
4 /*
5 请求ashx文件的时候 要把contentType去掉,还有就是
6 data 格式为 {”key”,”value”};切记 不要再 大括号外面加双引号,
7 这样就会在ashx页面取不到数据而失败
8 */
9 //contentType: 'application/json; charset=utf8',
10 data: {
11 "key1": "xdp",
12 "key2":"孤傲苍狼"
13 },
14 cache: false,
15 dataType: 'text',
16 success: function (data) {
17 alert(data);
18 },
19 error: function (xhr) {
20 alert("出现错误,请稍后再试:" + xhr.responseText);
21 }
22 });

这样在ashx文件中就可以使用如下的代码来获取$.ajax方法传递的参数了,代码如下:

1  string key1 = context.Request["key1"];
2 string key2 = context.Request["key2"];

以前一直都是用$.post方法来处理ajax,所以没有注意到这个问题,而这次由于是项目需要,所以就使用了$.ajax,没想到就遇到了上述的问题,好在找出了问题所在并且及时解决了问题。

另外,最近还遇到了一个奇怪的问题,"用ajax提交数据到ashx后,用JSON.stringify格式化参数后在服务器端取不到值?",代码如下:

 1  $.ajax({
2 url: '/Handler1.ashx?operFlag=test2',
3 type: 'POST',
4 //JSON.stringify格式化参数
5 data: JSON.stringify({
6 "key3": "xdp-gacl",
7 "key4": "白虎神皇"
8 }),
9 contentType: 'application/json; charset=utf8',
10 cache: false,
11 dataType: 'json',
12 success: function (data) {
13 alert(data.key3 + "|" + data.key4);
14 },
15 error: function (xhr) {
16 alert("出现错误,请稍后再试:" + xhr.responseText);
17 }
18 });

结果在ashx中使用context.Request["key3"]这种常规的方式是获取不到参数的,如下图所示:

郁闷了好久,怎么也想不明白为什么会这样,一开始以为是多了contentType: 'application/json; charset=utf8'这句代码造成的,于是把这句代码注释掉:

 1 $.ajax({
2 url: '/Handler1.ashx?operFlag=test2',
3 type: 'POST',
4 //JSON.stringify格式化参数
5 data: JSON.stringify({
6 "key3": "xdp-gacl",
7 "key4": "白虎神皇"
8 }),
9 //contentType: 'application/json; charset=utf8',
10 cache: false,
11 dataType: 'json',
12 success: function (data) {
13 alert(data.key3 + "|" + data.key4);
14 },
15 error: function (xhr) {
16 alert("出现错误,请稍后再试:" + xhr.responseText);
17 }
18 });

可是结果还是一样的,使用context.Request["key3"]还是获取不到参数,没办法,既然常规的方式获取不到,那就另寻他法吧,百度了一下,找到了解决办法,在ashx中使用如下的方式就可以获取到了,首先写一个通用的获取参数的方法,代码如下:

 1         /// <summary>
2 /// 获取参数
3 /// </summary>
4 /// <param name="context"></param>
5 /// <returns></returns>
6 private Dictionary<String, Object> GetParameter(HttpContext context)
7 {
8 StreamReader reader = new StreamReader(context.Request.InputStream);
9 //得到json字符串:strJson={"key3":"xdp-gacl","key4":"白虎神皇"}
10 String strJson = HttpUtility.UrlDecode(reader.ReadToEnd());
11 JavaScriptSerializer jss = new JavaScriptSerializer();
12 //将json字符串反序列化成一个Dictionary对象
13 Dictionary<String, Object> dicParameter = jss.Deserialize<Dictionary<String, Object>>(strJson);
14 return dicParameter;
15 }

GetParameter方法返回一个dicParameter对象,dicParameter就存放了从$.ajax方法中提交到ashx中的参数,如下图所示:

这样就可以从dicParameter中取出传递过来的参数作处理了,完整代码如下:

 1  public void ProcessRequest(HttpContext context)
2 {
3 context.Response.ContentType = "text/plain";
4 string operFlag = context.Request["operFlag"];
5 if (operFlag == "test1")
6 {
7 string key1 = context.Request["key1"];
8 string key2 = context.Request["key2"];
9 string resStr = key1 + "|" + key2;
10 context.Response.Write(resStr);
11 }
12 else if (operFlag == "test2")
13 {
14 Dictionary<String, Object> dicParameter = GetParameter(context);
15 string key3 = dicParameter["key3"].ToString();
16 string key4 = dicParameter["key4"].ToString();
17 string resStr = "{\"key3\":\"" + key3 + "\", \"key4\":\"" + key4 + "\"}";
18 context.Response.Write(resStr);
19 }
20
21 }

类型:Ajax;问题:ajax调用ashx参数获取不到;结果:ashx文件获取$.ajax()方法发送的数据的更多相关文章

  1. php 腾讯云 对象存储V5版本 获取返回的上传文件的链接方法

    腾讯云 对象存储V5版本 文档地址:https://github.com/tencentyun/cos-php-sdk-v5 调用简单文件上传方法: 返回数据如下 Array ( [data:prot ...

  2. ashx文件获取$.ajax()方法发送的数据

    今天在使用Jquery的ajax方法发送请求时,发现在后台中使用ashx文件无法接收到ajax方法中传递的参数,上网查了一下原因后发现了问题所在,原来是我在$.ajax方法中指明了"cont ...

  3. SqlParameter设定的value值为0时、调用的存储过程获取到的值却为null解决方法

    原C#代码如下: if (query != null) { switch (query.MethodFlag) { //进出口退补税额统计表 case (int)EnumClassifyCorrect ...

  4. ajax方法参数详解与$.each()和jquery里面each方法的区别

    JQuery中$.ajax()方法参数详解 url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为g ...

  5. 类型:JQuery;问题:ajax调用ashx文件;结果:ashx文件怎么获取$.ajax()方法发送的json数据

    ashx文件怎么获取$.ajax()方法发送的json数据 作者:careful 和ajax相关     新浪微博QQ空间QQ微博百度搜藏腾讯朋友QQ收藏百度空间人人网开心网0 $.ajax({  t ...

  6. jQuery $.ajax 参数说明及调用注意事项

    $.ajax参数设置 备注:data.contentType.dataType属性值很重要!!! async 类型:Boolean 默认值: true.默认设置下,所有请求均为异步请求.如果需要发送同 ...

  7. 用JQuery中的Ajax方法获取web service等后台程序中的方法

    用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...

  8. Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解

    1.什么是WebApi,它有什么用途? Web API是一个比较宽泛的概念.这里我们提到Web API特指ASP.NET MVC Web API.在新出的MVC中,增加了WebAPI,用于提供REST ...

  9. jquery Ajax跨域调用WebServices方法

    由于公司需要开发一个手机页面,想提供给同事直接在手机上可以查询SAP资料.数据需要使用js调用webserver来获取. 因为初次使用Jquery调用Webserver,所以期间并不顺利.测试调用We ...

随机推荐

  1. ML 线性回归Linear Regression

    线性回归 Linear Regression MOOC机器学习课程学习笔记 1 单变量线性回归Linear Regression with One Variable 1.1 模型表达Model Rep ...

  2. 关于tcp的知识记录

    1. 概念 TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的,可靠地,基于字节流的传输层通信协议.当应用层向TCP层发送用于网络间传输的用8位字节表 ...

  3. 解决Android7.1.1中无法打开/data目录的问题

    声明:本技巧借鉴https://segmentfault.com/a/1190000008416511这个大神的文章 一.复制android Sdk安装目录的platform-tools路径: 二.w ...

  4. OpenStack with Opendaylight Part 1: Intro to Pipeline

    Using Vagrant to create vm nodes; devstack to start openstack using Opendaylight as ML2. Openstack w ...

  5. struts2常见配置解决错误There is no mapped for namespace[/] and action name

    我碰到这个错误的原因是我把配置文件名写成了Struts.xml,改成struts.xml就可以了. 在确定struts.xml本身并没有写错的情况下,那么发生错误有可能是路径,配置文件名. 如果实在找 ...

  6. 配置标准的 ActiveMQ 组件

    简单地说,使用 ActiveMQ 的方式是固定且直接的:启动 ActiveMQ 服务器,发送消息,接收消息.但你并未理解 ActiveMQ 背后运作的详情.在一些要求更高的场景里,需要理解并有能力自定 ...

  7. DH03-单一职责原则

    模式简介 就一个类而言,应该仅有一个引起它变化的原因.不要存在多于一个导致类变更的原因.遵循单一职责原则.分别建立两个类T1和T2,使T1完成P1功能,T2完成P2功能.当修改T1时,不会使职责P2发 ...

  8. Enum Binding ItemsSource In WPF

    Enum Binding ItemsSource In WPF   在WPF中枚举绑定到ItemsSource. 一.通过ObjectDataProvider 获取Enum数据源 首先我们定义一个En ...

  9. ural 2014 Zhenya moves from parents

    2014. Zhenya moves from parents Time limit: 1.0 secondMemory limit: 64 MB Zhenya moved from his pare ...

  10. Vue中mixin的用法

    在项目中我们经常会遇到多个组件调用同一个方法的问题,为了避免每次都在.vue文件中定义并调用,我们可采用vue的mixin的用法: 具体使用如下: 我们需要在main.js中引入mixins文件夹下的 ...