zoukankan      html  css  js  c++  java
  • 响应不同的Ajax请求,您是怎么做的?

    使用Jquery发送请求,服务端用ashx文件来处理客户端的请求, 最开始的时候像下面的情形:
    1、$.get("getName.ashx",{id:12345},function(data){});

    2、$.post("setName.ashx",{name:"Zaibiechu"},function(data){});


    一个请求对应一个ashx文件,项目做久了,于是产生了一堆的ashx文件,自然觉得不是一个好办法。再接下来就把一些相关的请求放到同一个文件中来,而客户端通过发送一个“cmd”参数,来请求相应的方法,如下: 

    1、$.get("nameMethod.ashx",{cmd:"getName",id:12345},function(data){});

    2、$.post("nameMethod.ashx",{cmd:"setName",name:"Zaibiechu"},function(data){});


    服务器端处理: 

    public class nameMethod : IHttpHandler {
       
    public void ProcessRequest (HttpContext context) {
            context.Response.ContentType 
    = "text/plain";
            
    if (context.Request["cmd"!= null)
            {
                
    string cmd = context.Request["cmd"];
                
    switch (cmd)
                {
                    
    case "getName": GetName(context); break;
                    
    case "setName": SetName(context); break;
                        .                    
                }
            }
        }


        
    public void GetName(HttpContext context)
        {
            
        }

       
    public void SetName(HttpContext context)
        {
            
        }

    .      

    }

    这样文件是省了不少,但是一堆case,看上去还是别扭,怎么才可以看上去更好点呢。琢磨了一阵,想到了反射,遂将后台方法修改如下:

    public class nameMethod : IHttpHandler {
        
        
    public void ProcessRequest (HttpContext context) {
            context.Response.ContentType 
    = "text/plain";
            
    if (context.Request["cmd"!= null)
            {
                
    string cmd = context.Request["cmd"];
                var method 
    = this.GetType().GetMethod(cmd);
                
    if (method != null)
                {
                    method.Invoke(
    thisnew object[]{ context});
                }
            }
        }


        
    public void GetName(HttpContext context)
        {
             

        }

       
    public void SetName(HttpContext context)
        {
             
        }  

    }

      

    看上去似乎“优雅”多了,我能想到的处理方法就是这样,但总觉得这土生土长的方法,是不是一个好的解决方案呢,想听听大家的意见,你们在处理这个问题上是怎么做的呢,请不吝赐教。 

  • 相关阅读:
    在vs code中进行本地调试和开启本地服务器
    按highcharts中column形式转对象展现格式
    forEach、for in 、 for of三者的区别
    一位数左边补0,slice也可以
    js判断对象是否为空
    谷歌最佳实践
    谷歌最佳实践
    谷歌最佳实践
    谷歌最佳实践
    企业代码版本管理之争:TrunkBased vs GitFlow vs AoneFlow vs OneFlow vs ExeFlow
  • 原文地址:https://www.cnblogs.com/benz/p/1458559.html
Copyright © 2011-2022 走看看