一、什么是jsonp?jsonp与json有什么联系吗?javascript
jsonp是支持跨域的方式(能够返回回调名+json的形式)html
json与jsonp毫无联系。一种是数据格式,一种是跨域方式前端
参考文档:java
http://kb.cnblogs.com/page/139725/jquery
代码参考文档(Spring MVC、ajax):web
http://www.open-open.com/lib/view/open1430094913490.htmlajax
二、前端代码spring
一、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); } } });
二、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请求失败"); } ); });
三、后端代码json
一、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; } //注意:一、ServiceResult是封装的返回数据类而已,咱们这里能够本身定义json 二、JSONPObject是com.alibaba.fastjson.JSONPObject下的JSON 三、返回的时候必须加上回调函数,这样会改变对返回值的封装(都是返回ServiceResult)
二、借助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的方式进行跨域请求后端