博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonp跨域请求
阅读量:5142 次
发布时间:2019-06-13

本文共 1925 字,大约阅读时间需要 6 分钟。

1.什么是跨域

  跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。

  所谓同源是指,域名,协议,端口均相同。

2.什么是jsonp

  Jsonp其实就是一个跨域解决方案。Js跨域请求数据是不可以的,但是js跨域请求js脚本是可以的。可以把数据封装成一个js语句,做一个方法的调用。跨域请求js脚本可以得到此脚本。得到js脚本之后会立即执行。可以把数据做为参数传递到方法中。就可以获得数据。从而解决跨域问题。

3.jsonp的原理

  浏览器在js请求中,是允许通过script标签的src跨域请求,可以在请求的结果中添加回调方法名,在请求页面中定义方法,既可获取到跨域请求的数据。

4.服务端代码

方式一:自己拼装返回结果

@ResponseBody    public String getItemCatList(String callback) {         //此处获取对象信息        CatResult catResult = itemCatService.getItemCatList();        //把pojo转换成json字符串        String json = JsonUtils.objectToJson(catResult);        //拼装返回值//用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了         String result = callback + "(" + json + ");";        return result;    }

方式二:使用MappingJacksonValue对象拼装返回结果 

@ResponseBody    public Object getItemCatList(String callback) {        CatResult catResult = itemCatService.getItemCatList();        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);        mappingJacksonValue.setJsonpFunction(callback);        return mappingJacksonValue;    }

5.客户端代码

  5.1基于JavaScript标签实现调用

  添加一个<script>标签,用于发起跨域请求;注意看请求地址后面带了一个callback=showData的参数;

  showData即是回调函数名称,传到后台,用于包裹数据。数据返回到前端后,就是showData(result)的形式,因为是script脚本,所以自动调用showData函数,而result就是showData的参数。

  至此,我们算是跨域把数据请求回来了,但是比较麻烦,需要自己写脚本发起请求,然后写个回调函数处理数据,不是很方便

  5.2基于ajax的jsonp方式实现调用

$.ajax({    url: "http://localhost:9090/student",    type: "GET",    dataType: "jsonp", //指定服务器返回的数据类型    success: function (data) {        var result = JSON.stringify(data); //json对象转成字符串        alert(result);    }});

了解更多参考:https://www.cnblogs.com/chiangchou/p/jsonp.html

 

  

@ResponseBody

     public Object getItemCatList(String callback) {

          CatResult catResult = itemCatService.getItemCatList();

          MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);

          mappingJacksonValue.setJsonpFunction(callback);

          returnmappingJacksonValue;

     }

转载于:https://www.cnblogs.com/a-fun/p/9361003.html

你可能感兴趣的文章
短信编码总结
查看>>
了解HTML和Css样式
查看>>
关于settimer的一些新认识
查看>>
[转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更...
查看>>
VS2010中编辑属性无法输入中文决绝
查看>>
Fat-tree 胖树交换网络
查看>>
结合foreman和upstart 管理unicorn进程
查看>>
潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)...
查看>>
Android题库
查看>>
1-5-06:奥运奖牌计数
查看>>
Python简介和入门
查看>>
Windows下Python连接sqlite3数据库
查看>>
Javascript 类与静态类的实现(续)
查看>>
notes: the architecture of GDB
查看>>
shim和polyfill有什么区别
查看>>
Failed to load the JNI shared library “E:/2000/Java/JDK6/bin/..jre/bin/client/jvm.dll
查看>>
GIMP模版的制作
查看>>
Zabbix3.4服务器的搭建--CentOS7
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>