JSON和JSONP

来源:互联网 发布:程序员的数学 epub 编辑:程序博客网 时间:2024/06/06 07:28

JSON和JSONP

一、jsonp的如何实现跨域请求数据

JSON的缩写为(JavaScript Object Notation), JSONP 的缩写(JavaScript Object Notation with Padding)

浏览器在设计的时候,出于对安全的考虑,Ajax不允许跨域数据请求。ajax请求的数据必须来至于同源。在网站越来越大,业务越来越复杂。出现了服务化,不同业务之间的数据请求也更加频繁。由业务的需求,跨域的情况越来越多。JSONP产生的目的就是为了支持跨域。Jquery的ajax默认支持jsonp:

$.ajax({

    url: 'xxx //不同的域

    type: 'GET', // jsonp只支持GET

    dataType: 'jsonp', 

    jsonp: 'invCallback', // 回调函数,将于url拼接成xxxx&callback=invCallback

    success: function(json) {

        //do somthing

    }

})

在浏览器中,有三中标签允许请求跨域数据,script,img,iframe。这三个都一个特点,使用的属性都是src。 

jquery通过将url拼成虚拟的<script type="text/javascript" src=“url"></script>,来完成数据交互。


二、json和jsonp的区别


json是javascript对象,jsonp仅仅只是在json的外层加了一个回调方法。


三、后台如何实现jsonp


在后端中通过自定义springmvc的view来实现,并重写了view的render方法:

@Override

    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {

        if ("GET".equals(request.getMethod().toUpperCase())) {

            String callback = request.getParameter(callbackParam);//取出方法

            if (StringUtils.isBlank(callback)) {

                super.render(model, request, response);

            } else {

                response.getOutputStream().print(callback + "(“);//拼接

                super.render(model, request, response);

                response.getOutputStream().print(");");

            }

        } else {

            super.render(model, request, response);

        }

    }

方法识别请求参数中是否有callback参数,如何有callback则将callback拼接到json的外层。在编写的controller时,只需按照json的格式来写就Ok,

默认支持json和jsonp。

0 0
原创粉丝点击