跨域:根据浏览器的同源策略,浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。
解决办法:jsonp跨域,只支持get请求
jsp 代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
</head>
<body>
<div>
<button id="btn">点击提交</button>
</div>
<script type="text/javascript">
$("#btn").click(function(){
var callback = function(json){
alert(json);
}
$.ajax({
//url请求地址
url:"http://127.0.0.1:8080/ssm/jsonp",
type:"get",
//设置jsonp数据格式
dataType:"jsonp",
//请求路径的回到函数名
jsonp:"callback",
//返回函数名
jsonpCallback:"success_callback",
success:function(data){
console.log(data);
console.log(data.age);
}
})
}
)
</script>
</body>
</html>
controller:
package ssm.bx.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.util.JSONPObject;
import ssm.bx.bean.ResultBean;
import ssm.bx.bean.User;
import ssm.bx.service.UserService;
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value="/jsonp",method=RequestMethod.GET)
public Object jsonp(String callback) {
User result = userService.seletById(2);
if(callback==null) {
return result;
}
//使用jackson中的 JSONPObject,返回jsonp对象
JSONPObject jsonpObject = new JSONPObject(callback, result);
return jsonpObject;
}
}