Ajax+SpringMVC实现跨域请求
程序员文章站
2022-07-08 14:46:13
...
什么是跨域请求:所谓跨域请求,就是在一个项目里面请求另一个项目的controller。
为什么要跨域请求:浏览器的同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。从一个域上加载的脚本不允许访问另外一个域的文档属性。
一、普通请求
普通请求的Ajax:
$.ajax({
url: "threshold/testAjax",//请求地址
type: "POST",
dataType: "json",
async:false,
success: function(data) {//data是默认的,接收前台返回的数据
$("#id").val(data.id);
$("#voltage").val(data.voltage);
$("#electric").val(data.electric);
}
});
普通请求的Controller:
@RequestMapping(value = "testAjax", method = RequestMethod.POST)
@ResponseBody
public Threshold testAjax(){
List<Threshold> thresholds = thresholdService.findAll();
if(thresholds != null && thresholds.size() > 0){
return thresholds.get(0);
} else {
return null;
}
}
二、跨域请求:
跨域请求的Ajax:
$.ajax({
type: "GET",
url: "http://192.168.1.120:8080/CallPolice-1/threshold/getJsonp",//请求地址
async:true,//默认为true,不使用异步false执行时会等success中结束再继续执行下面
dataType: "jsonp",
jsonpCallback:"callback", //Jquery生成验证参数的名称
success: function(data) {//data是默认的,接收前台返回的数据
alert("dasdas---"+JSON.stringify(data));
}
});
function callback(data){
var jsonobj = eval('(' + data + ')');
if(jsonobj.orderCount!=""){
alert("回调成功");
}
}
跨域请求的Controller:
/*
* 测试跨域请求
* */
@RequestMapping(value="getJsonp",method=RequestMethod.GET)
@ResponseBody
public void test(HttpServletRequest request,HttpServletResponse response){
response.setHeader("P3P", "CP=CAO PSA OUR");
response.addHeader("Access-Control-Allow-Origin", "*");
String data = request.getParameter("data");
//1:业务逻辑
JSONObject returnMap = new JSONObject();
//2:输入json数据到前台页面
returnMap.put("name", "test name");
returnMap.put("age", 11);
returnMap.put("address", "test address");
PrintWriter pWriter = null;
try {
pWriter = response.getWriter();
pWriter.write("callback('" + returnMap.toString() + "')");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(pWriter!=null){
pWriter.flush();
pWriter.close();
}
}
}