jsonp Ajax跨域请求

时间:2024-10-03 21:36:20

什么是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"}