首页 新闻 会员 周边

为什么jQuery的post方法请求ashx传递过去的data参数出问题?

0
悬赏园豆:20 [已解决问题] 解决于 2014-06-27 10:49

对web前端技术不熟啊,为什么我用

1 $("#btnGet").bind("click",function(){
2     $.get("AjaxGet.ashx",
3           {name:"terry",sex:"男"},
4            function(data){
5             alert(data);
6            }
7           )
8   })

上面的代码完全可以执行,但是我用

         $("#btnPost").bind("click",function(){
                $.post("AjaxPost.ashx",
                            {name:"terry",sex:"男"},
                            function(data,status){
                                alert(data.name);
                                alert(data.sex);
                                alert(status);
                            },
                            "json"
                     )
            })    

post方法请求AjaxPost.ashx时,后台代码就会出错,QueryString["name"]返回的是一个null,why?AjaxGet.ashx中的代码和这个一模一样,为什么get方法请求的data可以被QueryString获取,而post不行?

求解释?

LgV5的主页 LgV5 | 菜鸟二级 | 园豆:221
提问于:2014-06-25 17:34
< >
分享
最佳答案
1

Get:用Request.QueryString读取

Post:用Request.Form读取

收获园豆:15
I,Robot | 大侠五级 |园豆:9783 | 2014-06-25 19:10

但是为什么我上面的代码,用post获取不了json字符串呢?按理说进入了function()方法啊,但是不能使用其中的data数据

LgV5 | 园豆:221 (菜鸟二级) | 2014-06-26 21:43

@车上有首长:  你用Firebug查看下响应的结果,就知道原因了

Zery | 园豆:6151 (大侠五级) | 2014-06-26 22:27

@车上有首长: 你的name和sex都是字符串,后台代码拼接的时候应该用双引号括起来吧。

比如应该返回:"{\"name\":\"" + name + "\",\"sex\":\"" + sex + "\"}"

I,Robot | 园豆:9783 (大侠五级) | 2014-06-26 22:54

@DiQiSoft.Com: 我试了一下,真的可以了,

           $("#btnPost").bind("click",function(){
                $.post("AjaxPost.ashx",
                            {name:"terry",sex:"男"},
                            function(data){
                            alert(data);
                               var sx = JSON.parse(data);
                               alert(sx.name);
                            }
                     );
            })

通过将name和sex的值再加上双引号,就可以调用JSON.parse(data)方法了,也就是说如果后台传递字符串到jQuery被解析成json,不管是key还有value都需要带有双引号吗?

LgV5 | 园豆:221 (菜鸟二级) | 2014-06-27 10:21

@DiQiSoft.Com:这个问题应该差不多有点眉目了,如果不是标准的json串(即key值和value都有""的情况),使用JSON.parse是会导致转化异常的,但是如果是简写的json串(即key值没有被双引号包围起来,但是value必须被双引号包着)就可以使用

var jsonObject = eval("(" + data + ")");

将后台传过来的json串转化为json对象,这个时候就可以使用 .XX属性,或者[XX属性]获得里面的数据了,不知道这样说对不对?灰常感谢

LgV5 | 园豆:221 (菜鸟二级) | 2014-06-27 10:46
其他回答(5)
1

你这样肯定有问题了context.Request.QueryString[]本来就是接受get传值的,你要用post传值的话,就应该写成context.Request.From[]这样啦。

收获园豆:5
Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-06-25 17:56

测试了下,的确是这样,但是为什么我上面的代码,用post获取不了json字符串呢?按理说进入了function()方法啊,但是不能使用其中的data数据

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-06-26 21:43

@车上有首长: 这个你要跟一下JS代码看提示什么才能做出判断,现在这要我也看不出来呢,你可以上个图,大家一起给你分析一下

支持(0) 反对(0) Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-06-27 09:44
0

用context.request.params[""]接收 

秋壶冰月 | 园豆:5903 (大侠五级) | 2014-06-25 18:29

测试了下,的确是这样,但是为什么我上面的代码,用post获取不了json字符串呢?按理说进入了function()方法啊,但是不能使用其中的data数据

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-06-26 21:43
1

你需要明白HTTP请求中 GET 与POST的区别   GET 是将传递的值附加在URL上而POST则是附加到请求体(Body)中 请求方式不一样 获取方式自然也就不一样了 Request.QueryString[] 是用于URL 的

Zery | 园豆:6151 (大侠五级) | 2014-06-25 19:09

但是为什么我上面的代码,用post获取不了json字符串呢?按理说进入了function()方法啊,但是不能使用其中的data数据

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-06-26 21:43
0

post提交的用context.request.params[]

骷髅人 | 园豆:464 (菜鸟二级) | 2014-06-26 17:49

但是为什么我上面的代码,用post获取不了json字符串呢?按理说进入了function()方法啊,但是不能使用其中的data数据

支持(0) 反对(0) LgV5 | 园豆:221 (菜鸟二级) | 2014-06-26 21:43
0

 function 是返回状态(回调函数) status有200 和404  500等标示  只有200代表成功 

前面的错误 楼上的都解释了很清楚了

s_p | 园豆:138 (初学一级) | 2014-06-26 22:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册