我有以下JS代码
$('#dialog').dialog({
...
buttons: {
OK: function() {
callAjax({"some":"param"});
$('#dialog').dialog('close');
}
}
});
var ajaxBatch = [];
function callAjax(cmd) {
ajaxBatch.push(cmd);
if (ajaxBatch.length == 1)
setTimeout(ajaxItself, 1);
}
function ajaxItself() {
ajaxBatch.push({"minor":"data"});
$.post('url', { msg: JSON.stringify(ajaxBatch) });
ajaxBatch = [];
}
理论上我应该总是[{"some":"param"},{"minor":"data"}]
。
但我常常在[{"some":"param"},{"some":"param"},{"minor":"data"}]
的错误请求中收到错误日志条目。
这样的事情怎么会发生?使用2x按钮的A4鼠标在这里有意义,还是什么?
顺便说一句,我无法重现这种情况,我只是在日志中看到它。并且用户代理也不受特定浏览器的限制。答案 0 :(得分:1)
浏览器可能排队了超过1次点击事件,因此无论该按钮是否可见,以便他们继续点击,事件已经启动。
也许在OK:
函数
if (!dialogIsClosed) {
callAjax({"some":"param"});
$('#dialog').dialog('close');
dialogIsClosed = true;
}
我认为浏览器会选择处理事件队列中的项目而不是处理setTimeout队列中的项目。