跨域访问解决方案:JSONP

Posted CodingBoy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨域访问解决方案:JSONP相关的知识,希望对你有一定的参考价值。

关于什么是跨域请求,可以参见我之前的博文:http://www.cnblogs.com/LiuChunfu/p/5240145.html

上述博文最后有提到解决方案,一直说补充,但是工作忙忘了,直到朋友问起这个问题,协助解决后,才想起来这么一回事。

通常来说跨域请求可以有2种解决方案,一个是利用同域的后台服务器请求后,在转发,二是利用JSONP.

今天只谈谈JSONP,JSONP其中的Padding恰好是包裹的意思。JSONP就是包裹JSON的意思哦,就是在JSON外面包裹一层的意思。

一、前端请求

JSONP类型的请求:

<script type="text/javascript">
            $.ajax({
                url:"http://localhost:8080/JsonTest/servlet/MyJson?callback=run",
                dataType:"jsonp",//关键部分1:指定返回类型为jsonp
                jsonpCallback:"run",//关键部分2:指定回调的方法是run
                success:function(data){
                    console.info(data.name);
                    alert(data.name);
                }
            });
        </script>

二、后台响应

String callback=request.getParameter("callback");
String json="{\'name\':\'LCF\'}";
response.getWriter().write(callback+"("+json+")");

这样在前台接收到的被包裹的JSON如下所示:

run({\'name\':\'LCF\'})

结合JSONP请求中的关键部分2,明确了回调的方式是run,可以理解为ajax自动的去找到了run包裹的内容。将其中的内容转为JSON对象。

以上是关于跨域访问解决方案:JSONP的主要内容,如果未能解决你的问题,请参考以下文章

跨域访问解决方案:JSONP

MVC上的jsonp扩展,解决跨域访问问题

JSONP

jsonp跨域访问

jsonp 方式处理跨域前后端代码如何配合?

jQuery javascript跨域问题(JSONP解决)