我遇到了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