[英]Ajax not always being called
好的,所以我有一個按鈕“ up”,當按下該按鈕時,將從8開始倒數,當它達到0時,將對update.php進行ajax調用,進而更新sql表。 update.php正在工作。
<input type='button' id='countdw' value='Wait 8s' class='btn btn-primary disabled'>
這是可行的,只是不是每次倒數達到0時才執行。這部分代碼似乎並非每次都執行
$.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>
任何幫助將不勝感激。
少-或相等
# instead of
# if(secsLeft == 0){
# test if it's less-or-equal zero
if(secsLeft <= 0){
在JavaScript中,事件有時會堆積起來,然后出現競態條件,這似乎不太可能。 在您的情況下,可能是secsLeft
減少了兩次,然后檢查是否相等。
是否發送了請求?
確保未發送AJAX請求。 每個瀏覽器都有開發人員工具,您可以在其中查看所有出站流量。 確保沒有錯誤消息響應您的AJAX請求。
除此之外,還應該在$.ajax
的success()
和error()
添加console.log(..)
,以查看是否正在發生幕后事件。
之后發生什么事?
您正在調用up()
方法。 確保此方法不會阻止您的AJAX調用,例如通過觸發重定向。
首先,我要你原諒我的英語。 我無法真正引起您的注意,但是當看到您的代碼時,變量mycount
的作用是什么,它在哪里定義? 當setInterval()
與第一個腳本塊一起運行時, secsLeft
將始終連續減小。 因此,每當secsLeft
<= 0
您將在“ else ”塊中有要執行的指令,這可能不是期望的結果。 這可以通過在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>
在第二個腳本塊中,實現的setInterval
與第一個腳本塊中的前一個之間可能發生“ 沖突 ”。 這也解釋了為什么我建議在實現相關條件后停止第一個操作。 另一個secsLeft <=0
是,如果使測試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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.