我遇到了ajax調用的問題。 我有一些代碼設置運行的功能,每2秒,這看起來看到,如果內容已經與WordPress AJAX更新與否,確實有一些用PHP的工作,然後更新數據庫:ajax在數據庫解鎖後多次觸發
window.setInterval("updateContent()", 2000);
function updateContent(){
if($('#needcontent').hasClass('yes')){
CONTENT.updateContent('monitor' , ids);
}
}
$(function() {
CONTENT= {
updateContent: function(callback, data){
data = {
action: 'myplugin_do_ajax',
callback: callback,
data: data
};
$.post(ajaxurl, data, function(response){
switch(data.callback){
case 'monitor' :
data_returned = eval("(" + response + ")");
if(data_returned.completed == 'true'){
//Adjust the DOM because there was a content update, and remove the class "yes" from #needcontent to stop the check until next time
}
else{
//Do nothing because no content was found, let the Interval run again
}
break;
}
}
}
}
問題我發現有時這些內容非常大,並且在php更新數據庫時鎖定表格。 ajax調用運行一次,運行到數據庫鎖中,並且不會返回任何內容,直到數據庫再次解鎖。數據庫可能會被鎖定10秒,導致1次運行和4次未運行的呼叫。
UPDATE: 這不是數據庫鎖定,它是PHP函數返回時間超過2秒,導致Interval一次又一次地循環而沒有響應。
發生了什麼事情是那些4個未運行的ajax調用然後開始一個接一個地發射一個像他們試圖趕上或什麼的。
我試過將間隔時間增加到10秒,但這並沒有解決問題,因爲如果數據庫被鎖定了11秒,它仍然會發生兩次。
我已經嘗試在JavaScript(yuck)中使用全局變量來停止調用該函數的時間間隔,但這似乎並不奏效。
UPDATE 2: 我在下面回答了我自己的問題,以幫助我解決問題。
不使用'setInterval',使用'AJAX的成功,而不是 – charlietfl 2014-09-27 16:21:16
@charlietfl內setTimeout' - 謝謝。您將我的想法轉向解決方案,爲我解決這個問題 – David 2014-09-28 02:50:56