当前位置:编程学习 > C#/ASP.NET >>

.net framework4.0 下ajax传输出问题

同样的代码,在.net framework3.5 下没有问题,而在 .framework4.0 下,请求没有传输到后台,坐等牛人指教。
开发平台 vs2010,
1. 网站属性->选择framework3.5,正常传输到后台;startRequest可以进入断点,ProcessRequest 可以进入断点。
2. 网站属性->选择framework4.0,不能传输到后台;startRequest可以进入断点,ProcessRequest 不能进入断点。


客户端代码:

//ashx 方法调用 
function startRequest(strParams) {
    createXmlHttp();
    
    var entid="";
    if(ashxParamType==ashxParamEnum.showShip)
    {
        entid="&entid="+strCompany_ID;
    }       

    //使用Get方式
    var Queryurl = "FirstPage/QueryHandler.ashx?rnd="+Math.random()+"&major=" + strParams+entid;
     
    xmlHttp.open("POST", Queryurl, true);
    xmlHttp.onreadystatechange = bindclass;
    xmlHttp.send(null);
}


服务器端代码:QueryHandler.ashx

public class QueryHandler : IHttpHandler,IReadOnlySessionState
{  

    public void ProcessRequest(HttpContext context)
    {      
             //majorid,前端传过来的参数,组合参数 (前端js有说明)
        string majorid = context.Request.Params["major"].ToString().Trim();
        if (!majorid.Contains(DictConst.SPLIT_CHAR_VERTICAL_LINE))
            return;   //参数格式不合法
             
       
        
        
        switch (majorid.Substring(0, 1))
        {......}
}
}
ajax --------------------编程问答--------------------
引用 楼主 catchdream 的回复:
同样的代码,在.net framework3.5 下没有问题,而在 .framework4.0 下,请求没有传输到后台,坐等牛人指教。
开发平台 vs2010,
1. 网站属性->选择framework3.5,正常传输到后台;startRequest可以进入断点,ProcessRequest 可以进入断点。
2. 网站属性->选择framework4.0,不能传输到后台;startRequest可以进入断点,ProcessRequest 不能进入断点。


客户端代码:

//ashx 方法调用 
function startRequest(strParams) {
    createXmlHttp();
    
    var entid="";
    if(ashxParamType==ashxParamEnum.showShip)
    {
        entid="&entid="+strCompany_ID;
    }       

    //使用Get方式
    var Queryurl = "FirstPage/QueryHandler.ashx?rnd="+Math.random()+"&major=" + strParams+entid;
     
    xmlHttp.open("POST", Queryurl, true);
    xmlHttp.onreadystatechange = bindclass;
    xmlHttp.send(null);
}


服务器端代码:QueryHandler.ashx

public class QueryHandler : IHttpHandler,IReadOnlySessionState
{  

    public void ProcessRequest(HttpContext context)
    {      
             //majorid,前端传过来的参数,组合参数 (前端js有说明)
        string majorid = context.Request.Params["major"].ToString().Trim();
        if (!majorid.Contains(DictConst.SPLIT_CHAR_VERTICAL_LINE))
            return;   //参数格式不合法
             
       
        
        
        switch (majorid.Substring(0, 1))
        {......}
}
}


一直用3.5 --------------------编程问答-------------------- 还真不知道这个有啥区别,没用过 --------------------编程问答-------------------- 好像framework4.0 要指定输出类型 --------------------编程问答-------------------- 主要 .net framework 3.5 有个 “IIS短文件名泄露漏洞”,只能升级到   4.0 来解决。 --------------------编程问答--------------------
引用 3 楼 liuchaolin 的回复:
好像framework4.0 要指定输出类型


能具体点么,多谢。。 --------------------编程问答--------------------
引用 5 楼 catchdream 的回复:
Quote: 引用 3 楼 liuchaolin 的回复:

好像framework4.0 要指定输出类型


能具体点么,多谢。。


context.Response.ContentType="text/xml"



--------------------编程问答--------------------
引用 6 楼 liuchaolin 的回复:
Quote: 引用 5 楼 catchdream 的回复:

Quote: 引用 3 楼 liuchaolin 的回复:

好像framework4.0 要指定输出类型


能具体点么,多谢。。


context.Response.ContentType="text/xml"





我在 ProcessRequest 里面指定了,但就是在这句上面设断点都没有进去。

public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";     
        switch (majorid.Substring(0, 1)) --------------------编程问答-------------------- 你的工程有几个项目
看看你这几个项目的.net 版本 --------------------编程问答--------------------
引用 8 楼 rmb147 的回复:
你的工程有几个项目
看看你这几个项目的.net 版本


和其他项目应该没关系,主要在 ajax 交互这块,就是断点没有进入到后台。。。 --------------------编程问答-------------------- 直接用个jquery,
$.post("url",{参数1:a,参数2:b},function(){})
搞定 --------------------编程问答-------------------- 为什么不用JQuery???
--------------------编程问答-------------------- 好像传两个参数以上用'&'有问题。我前面也遇到过. --------------------编程问答-------------------- //使用Get方式
    
var Queryurl = "FirstPage/QueryHandler.ashx?rnd="+Math.random()+"&major=" + strParams+entid;
    xmlHttp.open("GET", Queryurl, true);
    xmlHttp.onreadystatechange = bindclass;
    xmlHttp.send(null);

//使用POST方式
   
 xmlHttp.open("POST","FirstPage/QueryHandler.ashx",true);
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
    xmlHttp.send("rnd="+Math.random()+"&major=" + strParams+entid);
--------------------编程问答-------------------- LZ结贴啊。 。 --------------------编程问答-------------------- 感谢大家的回复,问题解决了,在web.config 中添加 
<httpRuntime requestValidationMode="2.0" />
这样可以使用 2.0 下的验证模式
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,