jsonp跨域
发布时间:2020-12-16 19:36:41 所属栏目:百科 来源:网络整理
导读:1、什么是jsonp?jsonp与json有什么联系吗? jsonp是支持跨域的方式(可以返回回调名+json的形式) json与jsonp毫无联系。一种是数据格式,一种是跨域方式 参考文档: http://kb.cnblogs.com/page/139725/ 代码参考文档(Spring MVC、ajax): http://www.op
1、什么是jsonp?jsonp与json有什么联系吗? jsonp是支持跨域的方式(可以返回回调名+json的形式) json与jsonp毫无联系。一种是数据格式,一种是跨域方式 参考文档: http://kb.cnblogs.com/page/139725/ 代码参考文档(Spring MVC、ajax): http://www.open-open.com/lib/view/open1430094913490.html 2、前端代码 1、jquery的ajax直接请求 $.ajax({ //跨域调用 url: "http://127.0.0.1:8085/hollympwechat-web/rest/jsonpRest/test",//接口地址 type: 'get',//请求方式 data: {},//json参数 async: false,dataType: "jsonp",jsonp: "callbackparam",//服务端用于接收callback调用的function名的参数 jsonpCallback: "success_jsonpCallback",//callback的function名称,服务端会把名称和data一起传递回来 success: function(data) { //响应成功的回调函数 if (data != null) { //回调操作 alert(data); } } }); 2、angular.js封装 var app = angular.module('cmpDetail',[]); app.controller("formCtrl",function($scope,$http) { $scope.userData = {}; $scope.dataurl = "http://127.0.0.1:8085/hollympwechat-web/rest/jsonpRest/test?callback=JSON_CALLBACK"; $http.jsonp($scope.dataurl,$scope.userData) .success( function(data) { alert(data); } ) .error( function(data) { alert("Jsonp请求失败"); } ); }); 3、后端代码 1、Spring MVC原生 @RequestMapping("/test") @ResponseBody public JSONPObject get(HttpServletRequest req,HttpServletResponse res) { String callbackFunName =req.getParameter("callback");//得到js函数名称 ServiceResult sr = new ServiceResult(); sr.setContent("chenyao"); sr.setSuccess(true); JSONPObject jsonp = new JSONPObject(callbackFunName); jsonp.addParameter(sr); return jsonp; } //注意:1、ServiceResult是封装的返回数据类而已,我们这里可以自己定义json 2、JSONPObject是com.alibaba.fastjson.JSONPObject下的JSON 3、返回的时候必须加上回调函数,这样会改变对返回值的封装(都是返回ServiceResult) 2、借助Spring MVC的模型类 <bean id="mappingJackson2JsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"> <property name="jsonpParameterNames"> <set> <value>jsonp</value> <value>callback</value> </set> </property> </bean> 直接返回想要数据(ServiceResult) @RequestMapping("/test") @ResponseBody public ServiceResult get(HttpServletRequest req,HttpServletResponse res) { ServiceResult sr = new ServiceResult(); sr.setContent("chenyao"); sr.setSuccess(true); return sr; } 总结:简单来说,就是你想用ajax请求不是你本项目内的接口,那么需要jsonp的方式进行跨域请求 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |