我是如何做到ajax跨域的

我是如何做到ajax跨域的

说明

公司临时安排一个功能:双十一抢购优惠券的功能。由于页面和后台处理不在同一个项目中,需要跨域。

实践

  1. 前台js代码
function getHb(){
	var isLogin=commonTool.isLogin();
	if(isLogin==false){
		$(".pop-up").show();
		$("#dl_zc").show();
	}else{
		//判断时间,是否开始或者结束
		var myDate = new Date();
		var h=myDate.getHours(); 
		if(parseInt(h) < 14){
			$(".pop-up").show();
			$("#no_begin").show();
		}else if(parseInt(h) >= 15){
			$(".pop-up").show();
			$("#today_end").show();
			
		}else{
			 //处理逻辑
			 //已经抢过了。
			 //$(".pop-up").show();
			 //$("#has_hb").show();
			 
			$.ajax({
				
             type: "GET",
             url:'http://api.xxx.com/redPacketApi.do?Action=checkHasHb&hduser='+hduser+'&date='+new Date().getTime(),
             dataType:'JSONP',  // 处理Ajax跨域问题
             jsonpCallback: "callback",  //指定回调函数名称
             success: function(msg){ 
             }
         });
		}
	}
}

function callback (data) {
	  if(0==data){//可以抢
	  	$(".pop-up").show();
			$("#tx_info").show();
	  }else if(2==data){
	  	$(".pop-up").show();
			$("#has_hb").show();
			
	  }else if(1==data){
	  	alert("信息有误,请联系管理员!");
	  }
}


  1. 后端代码
//省略。。。。
String hduser = Tool.getDefaultValue(request, "hduser", "");
if(hduser!=null&&!"".equals(hduser)&&!"null".equals(hduser)){
    hduser= Passport.cookie_decrypt(hduser);

    if(fenleiRedisManager.exists(preKey+hduser.split(";")[0])){//获取用户id
        AjaxUtils.sendData(response,"callback"+"("+2+")");//已经抢过
    }else{
        //如果在键中设置了值则返回OK。如果值未设置则返回 Null
        AjaxUtils.sendData(response,"callback"+"("+0+")");//可以开始抢,注意callback,跨域
    }

}else{//日期有误
    AjaxUtils.sendData(response,"callback"+"("+1+")");//错误
}
//。。。。省略
  1. 总结
    jquery的Ajax来处理跨域,最简单的方式,只需配置一个dataType:‘jsonp’,就可以发起一个跨域请求。jsonp指定服务器返回的数据类型为jsonp格式。

猜你喜欢

转载自blog.csdn.net/weixin_36087172/article/details/84766200