搜索
您的当前位置:首页正文

jsonp跨域的理解

来源:知库网

2:jsonp
既然这么容易跨域,那就得想解决方法。我们发现,当在web1中,使用

<script src="http://localhost:30001/test.js"></script>

发现script标签并没有同源的限制,我们可以正常获得test.js。jsonp就是利用script标签的这个特点,在本地创建一个回调函数,然后在远程服务上调用这个函数,并且将需要的数据拼接成json数据的形式作为参数传递,完成回调。
其实jsonp的实质就是将json数据填充进回调函数,jsonp = json+padding。
举例:web2中服务端的一段代码

public class MyService : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //获取回调函数名
            string callback = context.Request.QueryString["callback"];
            //json数据
            string json = "{\"name\":\"chopper\",\"sex\":\"man\"}";

            context.Response.ContentType = "application/json";
            //输出:回调函数名(json数据)
            context.Response.Write(callback + "(" + json + ")");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

web1中页面中代码

 <script type="text/javascript">
    function addScriptTag(src){
        var script = document.createElement('script');
        script.setAttribute("type","text/javascript");
        script.src = src;
        document.body.appendChild(script);
    }
    
    window.onload = function(){
        //调用远程服务
        addScriptTag("http://localhost:20002/MyService.ashx?callback=person");
        
    }
    //回调函数person
    function person(data) {
        alert(data.name + " is a " + data.sex);
    }
</script>
Top