Jsonp原理实例及MVC使用

 

最近,由于工作用到了json和jsonp,由于前台是Android的,后台是MVC。一般MVC后台要返回JSON和XML这两种格式,所以选择了JSON。同时,也用到了JSONP,

简单来说,Jsonp的原理就是通过<script>标记引入一个定义好json数据的js,因为<script>标记是不受域名限制的,JSONP是基于JSON的一种形式,可以跨域传输数据。

创建一个员工类

 
public  class Employee
    {

        public string Company { get; set; }
        public string Conference { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
View Code

创建一个JsonpResult类,继承了ActionResult。

另外,JavaScriptSerializer序列器要应用System.Web.Extensions的程序集。

 /// <summary>
    /// jsonp转换
    /// </summary>
    public class JsonpResult : ActionResult
    {
        public object Obj { get; set; }
        public string CallbackName { get; set; }

        public JsonpResult(object obj, string callback)
        {
            this.Obj = obj;
            this.CallbackName = callback;
        }

        public override void ExecuteResult(ControllerContext context)
        {
            var js = new System.Web.Script.Serialization.JavaScriptSerializer();
            var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";

            context.HttpContext.Response.ContentType = "application/json";
            context.HttpContext.Response.Write(jsonp);
        }
    }
View Code

 

MVC后台数据设置:

MVC控制器方法

  public ActionResult ShopSetting()
        {

       Employee e = new Employee();
            e.Age = 20;
            e.Company = "华为";
            e.Conference = "年终大会";
            e.Name= "Janekim";
            return GetJsonP(e, callback);//调用GetJsonP方法,传参数

        }//GetJsonP方法

 public ActionResult GetJsonP(object obj,string callback)
        {
            if (string.IsNullOrEmpty(callback)) callback = "callback";

            return new JsonpResult(obj,callback);

        }

返回这样的结果:

callback({"Age":20,“Company”:"华为",Conference":"年终大会","Name":"Janekim"})

 

前台的调用:

function getUserInfo(checkUser) {
    $.ajax({
        type: "GET",
        url: "http://xxx/employee/getjsonp?callback=?",
        cache: false,
        error: function () {
        },
        jsonp: "callback",
        dataType: "jsonp",
        success: function (result) {
            checkUser(result);//checkUser是一个处理employee对象的function
        }
    });

 如果想看简单实现jsonp格式,请看http://www.cnblogs.com/janekimyan/p/Janekim_Yan.html

posted on 2013-12-29 20:44  Janekim  阅读(652)  评论(0编辑  收藏  举报