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

    .NET MVC3 几种返回 JSON 对象的方式和注意事项

    转自:http://blog.csdn.net/xxj_jing/article/details/7382589

    引言在用 .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 对象

    <span style="font-size:12px;"><span style="color: rgb(102, 102, 102); font-family: SimSun; line-height: 26px;"> </span></span>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 对象

    <span style="font-size:12px;"><span style="font-family:SimSun;color:#666666;"><span style="line-height: 26px;"> </span></span></span> 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 属性决定。
     这么多种方法为的是给让大家用着方便,少走弯路!(我是走了弯路了,很不爽!)
      我喜欢用 2.4 的方法,个人喜好而已!

  • 相关阅读:
    【redis】主从复制
    【redis】订阅功能
    【redis】基础
    MySQL【十二】pymysql操作数据库
    MySQL【十一】创建索引
    MySQL【十】认识索引
    MySQL【九】树
    MySQL【八】多表查询
    ubuntu 制作ISO模块
    ubuntu 开机自启动
  • 原文地址:https://www.cnblogs.com/superfeeling/p/4872377.html
Copyright © 2011-2022 走看看