java 跨域-利用jsonp

时间:2023-03-08 18:04:29

Tomcat在 7.0.73, 8.0.39, 8.5.7 版本之前的可以用,不然后台报错

/**
* 前端首页跳转后台
*/
@RequestMapping("WebIndex.get")
@ResponseBody
public String WebIndex(HttpServletRequest request,HttpServletResponse response){
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//数据
List studentList = new ArrayList<>();
studentList.add("wu1");
studentList.add("wu2");
studentList.add("wu3");
String result=new Gson().toJson(studentList);
//前端传过来的回调函数名称
String callback = request.getParameter("callback");
     String callback2 = request.getParameter("name");//获得前端的参数
System.out.println(callback2);
//用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了
result = callback + "(" + result + ")";
logger.debug("前端首页跳转后台");
return result;
}

返回的参数  result = callback + "(" + result + ")"; 括号里的result必须是Json字符串形式,我在这纠结了一整天

前端用jq的ajax 即可 ,虽然失败不会走error路线,但是保证成功就行

<script>
window.onload=function(){
//url格式:地址?openid=密码&nickname=账号,split进行分割
var url = decodeURI(window.location.href);
var argsIndex = url.split("?openid=");
var argsIndex2 = argsIndex[1].split("&nickname=");
var openid = argsIndex2[0];
var nickname = argsIndex2[1];
alert("openid="+openid+"---"+"nickname="+nickname)
var ip = getip();
ip += "WebIndex.get";
var reqBody = {
username: "id",
password: "pwd"
};
var sendJson = {
body: reqBody
}
$.ajax({
url: ip,
type: "GET",
dataType: "jsonp", //指定服务器返回的数据类型
data:{
'name':'zuzuzu'
},
success: function (data) {
var result = JSON.stringify(data); //json对象转成字符串
alert(result);
}
});
}
//获得Ip地址
function getip() {
if(window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "../ip.xml", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
var ip = xmlDoc.getElementsByTagName("root")[0].childNodes[0].nodeValue;
return ip
}
</script>

getip方法是从xml里读取地址,本方法是从后台重定向过来的,附带了参数,所以先进行拆分后面跟着的参数,不需要的可以直接看ajax,Tomcat服务器版本有要求,要注意看