zoukankan      html  css  js  c++  java
  • .NET MVC3 几种返回 JSON 对象的方式和注意事项【转】

     原文:http://hi.baidu.com/duguyan123456/item/82a1d27e5a9c0815d0dcb386

    引言  在用 .NET MVC3 给我们做 WEB 项目带来很大灵活性同时,对刚上手的同学来说有些细微的设置导致的问题让我们 相当的“纠结”!

    这里要讨论的就是:使用JQuery的 Ajax 请求后“返回”的 JSON 数据问题。

     相信大多数同学都会遇到过,就是在后台已经拼接好了一 (拼接方法比较多,我的博客也有提到过!)串标准的JSON字符串,但是 Ajax 的 success 方法就是 无法正常解析 JSON 对象(相当郁闷啊!如果不是前端高手非得调疯了!)。

    下面将解几种返回 JSON 的方法和注意事项!

    注:我们默认前端使用的是 JQuery的 Ajax 请求.格式如下 当然我要返回的JSON 是下面形式的

    1.前台脚本

    /*  {    Data:true,   Msg:"成功",   Result:true   } */ 
    //JQuery的 Ajax 请求   
    $.ajax({     
        type: "Post",    
        url: "AddUser.aspx",    
        data: "",     
        dataType: "json", //如果要返回 json 这里很重要哦!!详细说明参见JQuery的API手册            
       success: function (result) {     
        alert(result.Result);       
        if (result.Result) {         
        alert('成功');       }       
        else {         
            alert("失败");       }     },     
        complete: function (XMLHttpRequest, textStatus) {       //alert("complete");     },     
        error: function (XMLHttpRequest, textStatus, errorThrown) {       alert("error");       
      // alert(XMLHttpRequest);      
     // alert(errorThrown);      
     // alert(textStatus);     }   })
    

    2.后台代码

    定义1: 返回的都是 ResultInfo 对象,对象声明如下

    /// <summary>   
    /// 调用结果信息类   
    /// </summary>   
    /// <typeparam name="T">泛型类型</typeparam>   
    public class ResultInfo<T> where T:new ()   
    {     
        /// <summary>     
        /// 调用结果是否成功    
         /// </summary>     
        public bool Result { set; get; }     
        /// <summary>     
        /// 调用结果返回的数据    
         /// </summary>     
        public T Data { set; get; }     
        /// <summary>     
        /// 调用结果返回的相关提示信息     
        /// </summary>     
        public string Msg { set; get; }   
    }
    

    定义2:   ToJsonStr() 方法,是我自己封装的一个将对象转换为 Json  字符串的一个扩展方法。

    2.1 请求的返回值为 JsonResult 对象

    public JsonResult AddUser()    
    {       
        bool flag = true;       
        ResultInfo<bool> result = new ResultInfo<bool>()       
        {         
            Result = flag,         
            Msg = flag ? "成功" : "失败",         
            Data = flag       
        };       
        JsonResult js = new JsonResult();       
        js.Data = result;       
        return js;    
    }
    

    说明:  JsonResult 对象比较方便了用着,你只需要将对象赋值 给它的实例化对象的 Data 属性,之后直接返回它就OK了,其他 的如何将对象转为 Json 字符串你都不用考录了!  但要注意的是:如果你画蛇添足,把对象转为 Json 字符串,然后 再赋值给 Data 属性,客户端是得不到 Json 对象的!

    2.2 请求的返回值为 ActionResult 对象   

    public ActionResult AddUser()     
    {       
        bool flag = true;       
        ResultInfo<bool> result = new ResultInfo<bool>()       
        {         
            Result = flag,         
            Msg = flag ? "成功" : "失败",         
            Data = flag       
        };       
        string json = result.ToJsonStr(); 
    
         return Content(json);
    
          //return Content(json,"text/json"); //这种写法也可以,第二个参数就是:MIME类型
    
    }
    

    说明:  当然你也可以使用 2.1 中的方式,返回 JsonResult 对象,咱们现在 要用另外一种方式返回JSON。  用这种方式脚本那边儿需要提供支持!就是要保证 JQuery的 Ajax 请求 的 dataType 属性值必须设为 "json",即:dataType: "json"。   没有这个支持你得到的将会是一个字符串!

    2.3 请求的返回值为 string 对象

    public string AddUser()     
    {       
        bool flag = true;       
        ResultInfo<bool> result = new ResultInfo<bool>()       
        {         
            Result = flag,         
            Msg = flag ? "成功" : "失败",         
            Data = flag       
        };       
        string json = result.ToJsonStr();       
        return json;     
    }
    

    说明:  用这种方式脚本那边儿需要提供支持!就是要保证 JQuery的 Ajax 请求 的 dataType 属性值必须设为 "json",即:dataType: "json"。   没有这个支持你得到的将会是一个字符串!

    2.4 设置 Response.ContentType 属性

    public string AddUser()    
    {       
        bool flag = true;       
        ResultInfo<bool> result = new ResultInfo<bool>()       
        {         
            Result = flag,         
            Msg = flag ? "成功" : "失败",         
            Data = flag       
        };       
        Response.ContentType = "application/json; charset=utf-8";       
        string json = result.ToJsonStr();       
        return json;     
    }
    

    说明:  如果在后台代码设置了,响应对象(response)的  Content-Type 等于 application/json; charset=utf-8 时, JQuery的 Ajax 请求可以不用有 dataType 属性。

    结论:   其实讨论了这么多就是解决 2.4 中要解决的问题,客户端如何 解析你返回的字符,就是通过 Content-Type 属性决定。  这么多种方法为的是给让大家用着方便,少走弯路!(我是走了弯路 了,很不爽!)

  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/quandeboke/p/3028914.html
Copyright © 2011-2022 走看看