jsonp跨域调用数据的前后台说明

jsonp的基础知识不多讲,只提一点,即jsonp所请求的其实是一段js代码,比如一个函数调用:

someFunc(para1,para2);

当然,前端页面上肯定需要函数的定义。jsonp调用了这段代码,并立即执行
如果你的函数名是确定的,这当然没有问题。但是我们经常看到jquery封装的jsonp调用会携带一个callback参数,这个其实就是个随机的函数名,方便匿名函数接管函数内容,从而通过函数的参数(前面说的那端jsonp所调用的js代码)实现数据调用。

前端示例:

$.ajax({
    url:"http://yourdomain.com/hello",
    dataType: "jsonp",
    success:function(a){
        alert(a.UserName);
    }
})

后台示例:

public class HelloController : Controller
{
    public ContentResult Index(string callback)
    {
        string UserName="";
        string AdminUrl="";
        string Phone="";
        //一些业务代码
        ...
        //组装返回结果
        if(string.IsNullOrEmpty(UserName))
        {
            return Content(callback+"({'res':\"0\"})");
        }
        else
        {
            string result = callback + "(" + "{res:\"1\",UserName:\"" + UserName + "\",AdminUrl:\"" + AdminUrl + "\",Phone:\"" + Phone + "\"}" + ")";
            return Content(result);
        }
    }
}

注意,关键在于接收一个callback参数,返回的是 callback(JSON对象)形式。

Published: June 21 2013

prize