首页 新闻 会员 周边

jquery ajax post 方式ashx文件取不到值。

1
悬赏园豆:80 [已解决问题] 解决于 2009-12-31 14:27

我的Common.js如下

//处理一般AJAX功能。
function InvokeHander(url,type,data, onSuccess, onFailure) {

    $.ajax({
        url: url, //路径
        type: type, //请求方式
        data: data, //请求的数据
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        beforeSend: function(x) {
            x.setRequestHeader("Content-Type", "application/json;");
        },
        success: function(result) {
            if (onSuccess) {
                if (result.d != undefined)
                    result = result.d;
                onSuccess(result);
            }

        },
        error: function(err) {
            if (onFailure) {
                onFailure(err);
            }
        }


    })


}

aspx页面js如下

 <script type="text/javascript" src="javascript/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="javascript/Common.js"></script>
    <script type="text/javascript">
        $(function() {
            $("#d1").change(function() {

                var did = $("#d1").find("option:selected").val();
                if (did != "请选择") {
                    InvokeHander("TypeHandler.ashx","POST","{id:'"+did+"'}" ,
                    function(result) {
                        if (result != null) {
                            for (i = 0; i < result.length; i++) {
                                var item = result[i];
                                alert(item.TypeName);

                            }

                        }
                    },
             function(err) {

                 alert('err');
             });
                }
                else {


                }
            });

        });
   
    </script>

 

ashx文件如下:

<%@ WebHandler Language="C#" class="TypeHandler" %>

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Web.Script.Serialization;
public class TypeHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {

        if (context.Request["id"] == null)//这里永久为null用Request.form["id"]也不行
        {
          
        }
        else
        {
            context.Response.Write(GetType(decimal.Parse(context.Request["id"].ToString())));
        }
       
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }

    }

    public string GetType(decimal id)
    {
        ArrayList arr = new ArrayList();
        SqlConnection conn = new SqlConnection("server=PC-200911131211;database=petsdata;uid=sa;pwd=sa123456");
        SqlDataAdapter da = new SqlDataAdapter("select * from infor_type2 where infor_type2_father='" + id + "'", conn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            arr.Add(new {
                TypeID = ds.Tables[0].Rows[i]["infor_type2_id"].ToString(),
                TypeName=ds.Tables[0].Rows[i]["infor_type2_name"].ToString()
           
            });
       
        }

        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string result = serializer.Serialize(arr);
        return result;
     
    }

   
}
   

假如我把上面请求方法换成POST传进去的data换成: "id="+did ,ashx用request.QueryString["id"]就一点问题都没。

请博客园的高手帮帮我吧。。。。我看见CSDN上也有类似的情况,好像也没解决。

地址:http://topic.csdn.net/u/20091126/17/a015820e-d41f-4689-b6fe-232a098c2699.html

问题补充: var item = result[i]; 下面那个分号我是弹出一个item.TypeName可能是博客园屏蔽了ALERT 1,2,3楼的方法我试过了,不行。
肥嘟嘟左卫门的主页 肥嘟嘟左卫门 | 初学一级 | 园豆:70
提问于:2009-12-28 13:44
< >
分享
最佳答案
0

context.Request[] 是不能用json的,data数据格式改成:id=121&name=sss 等等这种格式啊应该就行了,不行的话contentType 也修改一下

context.Request.GetResponseStream() 好像是这个方法吧,他可以获取post的流,json也就可以得到啊:)

收获园豆:20
LittlePeng | 老鸟四级 |园豆:3445 | 2009-12-29 21:35
jquery的ajax可以传json的,jquery会把它转换成查询字符串(get)或者Form的参数(post)的。
Cheese | 园豆:509 (小虾三级) | 2009-12-30 18:00
试过不行
肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2009-12-31 14:26
@Cheese: 是可以传,但是,post参数格式和json的格式是不相同的,他已经搞成了json格式了
LittlePeng | 园豆:3445 (老鸟四级) | 2010-01-01 12:42
@肥嘟嘟左卫门: 不可能的,哦那个我写错了是: StreamReader stw = new StreamReader(HttpContext.Current.Request.InputStream); string PostData = stw.ReadToEnd(); 这样得到数据流,我想的话json可能无法转成NameValueCollection的,你看看得到数据流没有啊!!! 不然用跟踪器查看是不是post过去了??
LittlePeng | 园豆:3445 (老鸟四级) | 2010-01-01 12:46
@肥嘟嘟左卫门: 调试ajax 要用跟踪器的:建议用live httphead :)
LittlePeng | 园豆:3445 (老鸟四级) | 2010-01-01 12:49
其他回答(11)
0

InvokeHander("TypeHandler.ashx","POST","id="+did+"" ,

收获园豆:10
woody.wu | 园豆:3621 (老鸟四级) | 2009-12-28 14:14
试过不行
支持(0) 反对(0) 肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2009-12-31 14:26
0

data: eval('"("+data+")"'), //请求的数据

收获园豆:10
Rex.He | 园豆:215 (菜鸟二级) | 2009-12-28 16:30
试过不行
支持(0) 反对(0) 肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2009-12-31 14:26
0

在js顶部写 $.ajaxSetup({cache:false}); 关闭客户端缓存即可

收获园豆:10
紫色永恒 | 园豆:844 (小虾三级) | 2009-12-28 22:07
试过不行
支持(0) 反对(0) 肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2009-12-31 14:26
0

var reqDataString = "{id:" + did + "}";

var reqData = eval("(" + reqDataString+ ")");

alert(reqData.id); //如果这里弹出正确的id,那说明reqData是一个正确的json对象了。

请求的时候,这样赋值,应该是ok的,

data:reqData

如果不行,那就是别的地方的问题了。

收获园豆:20
Cheese | 园豆:509 (小虾三级) | 2009-12-29 14:58
试过不行
支持(0) 反对(0) 肥嘟嘟左卫门 | 园豆:70 (初学一级) | 2009-12-31 14:26
0

是不是,不支持json的格式啊,你的.net是什么版本

收获园豆:10
chenleinet | 园豆:270 (菜鸟二级) | 2009-12-29 20:38
0

这个问题不是没解决吗?为什么就结贴说已解决了。

在路上狂奔的蜗牛 | 园豆:50 (初学一级) | 2011-12-28 01:46
0

解决没有啊 ? 我发现换个浏览器就可以,而且,昨天可以,今天再试不可以。

天北涯 | 园豆:202 (菜鸟二级) | 2013-03-15 17:42
0

你把contentType: "application/json;charset=utf-8",这个参数去掉就既可以支持POST也可以支持GET了。

BruceGoGo | 园豆:34 (初学一级) | 2014-06-04 10:29

同样问题,这个试过可以了,谢谢

支持(0) 反对(0) windancer|亮 | 园豆:200 (初学一级) | 2015-09-25 10:32
0

 string username = context.Request["username"]??"";  这样写   就没事

J_une | 园豆:202 (菜鸟二级) | 2014-06-14 02:41
0

断水断电萨阿德

★星星☆ | 园豆:202 (菜鸟二级) | 2015-12-22 18:04
0

把contentType: "application/json;charset=utf-8",这个参数去掉就既可以支持POST也可以支持GET了。

lizhigang | 园豆:202 (菜鸟二级) | 2016-11-17 13:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册