jsonp Ajax跨域请求

什么是JSONP?

JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

先来搞清楚它的原理

首先在客户端注册一个callback, 然后把callback的名字传给服务器,此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

下面示范一个demo

 $(function () {
            $.ajax({
                url: 'http://localhost:30158/Home/GetUser',
                dataType: "jsonp",
                jsonp: "jsoncallback",
                success: function (data) {                  
                    console.log(data);
                    if (data!="") {

                    } 
                }
            });
        })

服务端的代码,我简单做了一个方法

   [HttpGet]
        public ActionResult GetUser()
        {
          
            var jsoncallback = WebContext.Request.TrimGet<string>("jsoncallback", "");
            string userInfo = JsonConvert.SerializeObject(new { Name = "admin", LoginTime = DateTime.Now });
            return Content(string.Format("{0}({1})", jsoncallback, userInfo));

        }

结果:Object {Name: "admin", LoginTime: "2016-07-19T14:09:27.3922877+08:00"}

 

posted on 2016-07-19 14:12  UnLike  阅读(145)  评论(0编辑  收藏  举报

导航