zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    web页面接入QQ客服的方法
    如何使用webapi集成swagger
    TCP的三次握手和四次挥手
    笔记-ASP.NET WebApi
    .net开发人员应该知道的几个网站
    HttpClient在async中产生的代码不执行和堵塞
    【转】CA证书申请+IIS配置HTTPS+默认访问https路径
    WebApi捕捉异常的一套方案
    使用Topshelf部署你的Job
    使用ajax局部更新Razor页面
  • 原文地址:https://www.cnblogs.com/janekimyan/p/Janekim.html
Copyright © 2011-2022 走看看