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"}