转: .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 ...
随机推荐
- cocos2d ccitemimage
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class H ...
- BZOJ1829 : [Usaco2010 Mar]starc星际争霸
设出$x,y,z$三个未知量分别表示三种单位的战斗力. 那么各种不等式都可以表示成$ax+by+cz\geq 0$的形式. 注意到$z>0$,那么两边都除以$z$得到$ax+by+c\geq 0 ...
- 密码等级:至少包含字母、大小写数字、字符中的两种 JS实现方案
前言 密码,如果设置的太简单,很容易就被攻破,所以很多网站将密码设置的要求设置的挺严格,一般是字母.数字.字符3选2,区分大小写.对于设置得太简单的密码,予以错误提示.或者予以密码等级(低中高)显示, ...
- Codeforces Round #203 (Div. 2) A.TL
#include <iostream> #include <algorithm> using namespace std; int main(){ int n,m; cin & ...
- C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)
一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...
- 用Git进行协同开发
用Git进行协同开发 问题场景描述 常常会遇到这样的协同场景:后台的同事和前端的同事需要共同开发一个新功能,而他们的代码相互依赖,所以需要不停地更新各自的代码进行联调. 对于这种场景,最简单的方式就是 ...
- 给NSString增加Java风格的方法
给NSString增加Java风格的方法 文章目录 我实在受不了 NSString 冗长的方法调用了,每次写之前都要查文档.特别是那个去掉前后多余的空格的方法,长得离谱.与之对应的别的语言,拿 jav ...
- 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题
Python中没有像C#中有三元表达式 A?B:C 但在python中可以通过 A if condition else B 的方式来达到同样的效果. 例如 : 1 if True else 0 输出 ...
- virsh命令
查看虚拟机: [root@super67 ~]# virsh list Id Name State --------------------- ...
- lightning mdb 源代码分析系列(3)
本系列前两章已经描述了系统架构以及系统构建的基础内存映射,本章将详细描述lmdb的核心,外存B+Tree的操作.本文将从基本原理.内存操作方式.外存操作方式以及LMDB中的相关函数等几方面描述LMDB ...