转: .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 的方法,个人喜好而已!
转: .NET MVC3 几种返回 JSON 对象的方式和注意事项的更多相关文章
- Django中的 返回json对象的方式
在返回json对象的几种方式: 1 from django.shortcuts import render, HttpResponse # Create your views here. from d ...
- 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- Spring MVC学习笔记——返回JSON对象
1.想要GET请求返回JSON对象,首先需要导入jackson-all-1.9.4.jar包 2.在控制器中添加不同的show()方法 //show()方法返回JSON对象 @RequestMappi ...
- 类型转换及返回json对象的问题
@ResponseBody @RequestMapping(value="/user/getUserId.do")//method=RequestMethod.POST publi ...
- [django]django 3种返回json方法
django 3种返回json方法 1.手动组装字典返回 from django.http import JsonResponse, HttpResponse from django.shortcut ...
- VB 老旧版本维护系列---尴尬的webapi访问返回json对象
尴尬的webapi访问返回json对象 首先Imports Newtonsoft.Json Imports MSXML2(Interop.MSXML2.dll) Dim URLEncode As Sy ...
- spring mvc返回json字符串的方式
spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json 优点:不需要自己再处理 步骤一:在spring- ...
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- spring mvc中几种获取request对象的方式
在使用spring进行web开发的时候,优势会用到request对象,用来获取访问ip.请求头信息等 这里收集几种获取request对象的方式 方法一:在controller里面的加参数 public ...
随机推荐
- DevExpress DXperience 的ASPxFilterControl 不显示 Like 菜单的方法
当使用Linq 作为数据源时,如果使用 ASPxFilterControl 的 Like 菜单筛选数据,就会出现以下错误 LINQ to Entities does not recognize the ...
- Color the Ball[HDU1199]
Color the Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- Nightmare
Nightmare Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 苹果应用商店DNS修改加快下载速度
具体方法:依次点击进入[设置]→[无线局域网]→[WiFi网络右侧小i图标]→更改DNS地址,可以按照自身需求选择以下某个DNS进行更换. OpenDNS:208.67.222.222和208.67. ...
- 为tomcat 安装 native 和配置apr
yum install -y apr-devel openssl-devel gcc 安装native cd /lxyy/tomcat7/bin tar zxvf tomcat-native.tar. ...
- 添加 Windows 8.1 无虚拟机启动项 解决极品飞车的不支持虚拟机报错
在Windows 8.1 64位环境下,安装完极品飞车17后,运行程序会出现错误对话框: Sorry, this application cannot run under a Virual Machi ...
- Windows环境下Redis
Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...
- svn服务器配置
源代码版本维护 官方网站:http://subversion.apache.org/ Windows客户端 TortoiseSVN:http://tortoisesvn.net/ 常见的版本控制软件 ...
- 内核Makefile编写
对于大部分内核模块或设备驱动的开发者和使用者来说,最常接触到的就是各层目录下基于kbuild架构的kbuild Makefile文件.主要部分有:1.目标定义,目标定义就是用来定义哪些内容要做为模块编 ...
- 当一回Android Studio 2.0的小白鼠
上个星期就放出了Android studio出2.0的消息,看了一下what's new 简直抓到了那个蛋疼的编译速度痛点.在网上稍微搜索了一下后发现基本都是介绍视频.一番挣扎后(因为被这IDE坑过几 ...