好的,我有一个按钮' up'当按下时,从8开始倒计时,当它达到0时,对update.php进行ajax调用,然后更新sql表。 update.php正在运行。
<input type='button' id='countdw' value='Wait 8s' class='btn btn-primary disabled'>
这是有效的,只是每次倒计时到达时都没有。这段代码似乎每次都没有执行
$.ajax({
url: "update.php",
这是代码
<script>
var secsLeft = 8;
setInterval(function(){
secsLeft--;
if(secsLeft > 0){
$('#countdw').val('Wait ' + secsLeft + 's');
} else if(secsLeft == 0){
$('#countdw').removeClass('disabled');
$('#countdw').val('UP');
$('#countdw').attr("onclick","myfunction()");
}
}, 1000);
</script>
<script>
count=0;
function myfunction(){
if(mycount!=0 && mycount%25==0){
}else{
var secsLeft = 8;
setInterval(function(){
secsLeft--;
if(secsLeft > 0){
$('#countdw').addClass('disabled');
$('#countdw').val('Wait ' + secsLeft + 's');
} else if(secsLeft == 0){
$('#countdw').removeClass('disabled');
$('#countdw').val('UP');
$('#countdw').attr("onclick","myfunction()");
$.ajax({
url: "update.php",
data:{'user':'<?php echo $subid ?>','data':'<?php echo $key ?>'},
success: function(result){
}
});
}
}, 1000);
}
up();
}
</script>
非常感谢任何帮助。
答案 0 :(得分:2)
<强>欠或相等的强>
# instead of
# if(secsLeft == 0){
# test if it's less-or-equal zero
if(secsLeft <= 0){
在JavaScript事件中,有时会堆积起来,然后出现竞争条件,这似乎不太可能。在你的情况下,可能是secsLeft
在检查相等性之前减少了两次。
是否已发送请求?
确保未发送AJAX请求。每个浏览器都有开发人员工具,您可以在其中检查所有流量。确保没有错误消息作为对您的AJAX请求的响应。
除此之外,您应该将console.log(..)
添加到success()
的{{1}}和error()
个功能中,以查看幕后是否发生了某些事情。
之后发生了什么?
您正在调用方法$.ajax
。确保此方法不会阻止您的AJAX调用,例如通过触发重定向。
答案 1 :(得分:0)
首先,我要你原谅我的英语。我无法真正了解您的当务之急,但在查看您的代码时,变量mycount
的作用是什么?它在何处定义?当setInterval()
与第一个脚本块一起运行时,secsLeft
将始终持续减少。因此,每次secsLeft
为<= 0
时,您都会在&#34; 其他&#34;将要执行的块,也许它不是所需的结果。这可以通过在secsLeft<=0
时停止定时功能来优化。然后你会有类似的东西:
<script>
var secsLeft = 8;
var timedDecreaseID = setInterval(function(){
secsLeft--;
if(secsLeft > 0){
$('#countdw').val('Wait ' + secsLeft + 's');
} else { //secsLeft <= 0
$('#countdw').removeClass('disabled');
$('#countdw').val('UP');
$('#countdw').attr("onclick","myfunction()");
clearInterval( timedDecreaseID );//will stop this timed function
}
}, 1000);
</script>
在第二个脚本块中可能存在&#34; collision &#34;在第一个脚本块中实现的setInterval
和之前的另一个之间。这也解释了为什么我建议在实现相关条件后停止第一个。另一个注意事项是,如果您进行测试secsLeft <=0
,每次secsLeft
将在值0
下减少时,您将收到ajax调用,如果考虑setInterval
,这将始终发生}呼叫没有停止。所以,除非是期望的结果,我认为最好做一些像:
<script>
count=0;
function myfunction(){
if(mycount!=0 && mycount%25==0){
}else{
var secsLeft = 8;
timedDecreaseID = setInterval(function(){
secsLeft--;
if(secsLeft > 0){
$('#countdw').addClass('disabled');
$('#countdw').val('Wait ' + secsLeft + 's');
} else {//secsLeft <= 0
$('#countdw').removeClass('disabled');
$('#countdw').val('UP');
$('#countdw').attr("onclick","myfunction()");
$.ajax({
url: "update.php",
data:{'user':'<?php echo $subid ?>','data':'<?php echo $key ?>'},
success: function(result){
}
});
clearInterval( timedDecreaseID );//will stop this timed function
}
}, 1000);
}
up();
}
</script>