jsonp跨域

一、什么是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的方式进行跨域请求后端

相关文章
相关标签/搜索