说明
公司临时安排一个功能:双十一抢购优惠券的功能。由于页面和后台处理不在同一个项目中,需要跨域。
实践
- 前台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("信息有误,请联系管理员!");
}
}
- 后端代码
//省略。。。。
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+")");//错误
}
//。。。。省略
- 总结
jquery的Ajax来处理跨域,最简单的方式,只需配置一个dataType:‘jsonp’,就可以发起一个跨域请求。jsonp指定服务器返回的数据类型为jsonp格式。