加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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的方式进行跨域请求

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读