Ajax+SpringMVC实现跨域请求

什么是跨域请求:所谓跨域请求,就是在一个项目里面请求另一个项目的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();
            }           
        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值