补充,尽量使用详细的路径,不要使用
"/resources/script/seckill.js"
推荐使用
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
src="<%=basePath%>resources/script/seckill.js"
我也遇到了同问
IDEA 实现已调试可实现全部代码,还有用心整理的笔记 https://github.com/yoyo185644/seckill/tree/master
在detail.jsp中加入这个样式
用微服务框架
你这里的条件对不
浏览器是一样的不,会不会是事件的处理机制不一样呢
这个问题还没找到解决办法,一直说是加载js文件失败,没有找到变量,直接粘贴js代码到detail文件中的话是可以的。
“加上”
检查detail 的js,哪个地方格式不对
你看看浏览器的控制台报的什么错
难受啊
引入的detail.js文件有个var=seckill:{detail:{}},这个是在js文件里定义的
你在页面上按一下F12,看看控制台是不是报错了,页面按钮无法点击或者页面内容失效,代表你的JS报错了,一定是哪个地方的值为null,或者哪个字段未定义了。好好找找
打开工程看看~
行末加 .show()
程序的问题,贴出你的代码
在问题中找到正解了。修改bootstrap版本为3.3.0
<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet">
老师原来登录过。cookie会保存参数。你先 进入详情页如果没有参数他会让你输入然后提交就有了
//存放主要交互逻辑js代码
// javascript 模块化
var seckill = {
//封装秒杀相关ajax的url
URL:{
now : function(){
return '/seckill/time/now';
},
exposer : function(seckillId){
return '/seckill/' + seckillId + '/exposer';
},
execution : function(seckillId, md5){
return '/seckill/' + seckillId + '/' + md5 +'/execution';
}
},
//验证手机号
validatePhone : function(phone){
if(phone && phone.length == 11 && !isNaN(phone)){
return true;
}else{
return false;
}
},
//获取秒杀地址,控制显示逻辑,执行秒杀按钮
handleSeckillKill : function(seckillId,node){
node.hide()
.html('<button class="btn btn-primary btn-1g" id="killBtn">开始秒杀</button>');//按钮
$.post(seckill.URL.exposer(seckillId),{},function(result){
//在回调函数中执行交互流程
if(result && result['success']){
var exposer = result['data'];
if(exposer['exposed']){
//开始秒杀
//获取秒杀的地址
var killUrl = seckill.URL.execution(seckillId,exposer['md5']);
console.log("killUrl:" + killUrl);
//绑定一次点击事件
$('#killBtn').one('click',function(){
//1:绑定执行秒杀请求的操作
$(this).addClass('disabled');
//2:发送秒杀的请求
$.post(killUrl,{},function(result){
console.log(result)
if(result && result['success']){
var killResult = result['data'];
var state = killResult['state'];
var stateInfo = killResult['stateInfo'];
//3:显示秒杀结果
node.html('<span class="label label-success">' + stateInfo + '</span>');
}
});
})
node.show();
}else{
//未开始
var now = exposer['now'];
var start = exposer['start'];
var end = exposer['end'];
//重新计算计时逻辑
seckill.countdown(seckillId,now,start,end);
}
}else{
console.log('exposer:' + result)
}
});
},
countdown:function(seckillId, nowTime, startTime, endTime){
var seckillBox = $('#seckill-box');
//时间判断
if(nowTime > endTime){
//秒杀结束
seckillBox.html('秒杀结束!')
}else if(nowTime < startTime){
//秒杀未开始,计时
var killTime = new Date(startTime + 1000);
seckillBox.countdown(killTime,function(event){
var format = event.strftime('秒杀倒计时:%D天 %H时 %M分 %S秒');
seckillBox.html(format);
}).on('finish.countdown',function(){
seckill.handleSeckillKill(seckillId,seckillBox);
});
}else{
//秒杀开始
seckill.handleSeckillKill(seckillId,seckillBox);
}
},
//详情页秒杀逻辑
detail:{
//详情页初始化
init : function(params){
//用户手机验证和登录,计时交互
//规划我们的交互流程
//在cookie中查找手机号
var killPhone = $.cookie("killPhone");
//验证手机号
if(!seckill.validatePhone(killPhone)){
//绑定phone
//控制输出
var killPhoneModal = $('#killPhoneModal');
//显示弹出层
killPhoneModal.modal({
show:true, //显示弹出层
backdr:'static', //禁止位置关闭
keyboard:false //关闭键盘事件
});
$('#killPhoneBtn').click(function(){
var inputPhone = $('#killPhoneKey').val();
if(seckill.validatePhone(inputPhone)){
//电话写入cookie
$.cookie('killPhone',inputPhone,{expires:7,path:'/seckill'});
//刷新页面
window.location.reload();
}
else{
$('#killPhoneMessage').hide().html('<label class="label label-danger">手机号错误!</label>').show(300);
}
})
}
//已经登陆了
//计时交互
var startTime = params['startTime'];
var endTime = params['endTime'];
var seckillId = params['seckillId'];
$.get(seckill.URL.now(), {}, function(result){
if(result && result['success']){
var nowTime = result['data'];
//时间判断,计时交互
seckill.countdown(seckillId,nowTime,startTime,endTime);
}else{
console.log('result:' + result);
}
});
}
}
}
你的jsp页面设置编码格式为UTF-8了么?
这是因为你前边引入的js有错误,没有成功引入。仔仔细细检查一下seckill.js 看看哪里少了括号什么的
$.cookie('userPhone', inputPhone, {expires: 7, path: '/Seckill'});你的这里的path: 要写成/项目,这样才能获取
应该是你的代码有问题,我就是这样的,js页面里面的代码有错
<script type="text/javascript" src="<%=basePath %>resources/script/seckill.js"> </script>
光是看这个js好像没有错。
有两个办法:
在浏览器里打断点调试js
github上有网友把代码都上传了,可以找来对比下
个人遇到这类问题的原因只有js文件引用文件路径或引用位置有误
这个问题暂时没有,我现在的问题是jQuery-countdown这个插件报错显示格式不对,最新的版本2.0老师那怎么2.1了,郁闷啊
在验证手机号那边。validatePhone()中忘记输入killPhone,导致一直判断没有输入手机号