Javascript函数仍在运行时再次被调用
我有一个javascript函数,当用户单击一个按钮并执行一个AJAX查询,向我的数据库添加一些数据时,就会调用该函数。然而,我一直收到很多抱怨,说很多数据都没有通过,我把问题隔离出来,就是点击之间的时间。当他们在两次点击之间等待足够长的时间时,数据总是能够通过,但如果他们没有等待足够长的时间,那就太糟糕了 所以我基本上确定了问题是javascript函数在运行时再次被调用,这是我不允许的。有没有一种方法可以在函数开始时锁定用户的浏览器,并在AJAX结束后解锁它?我知道这可能会激怒我的用户,但我看不到任何其他解决方案 这并非完全必要,但我的javascript函数如下所示:Javascript函数仍在运行时再次被调用,javascript,jquery,ajax,locking,Javascript,Jquery,Ajax,Locking,我有一个javascript函数,当用户单击一个按钮并执行一个AJAX查询,向我的数据库添加一些数据时,就会调用该函数。然而,我一直收到很多抱怨,说很多数据都没有通过,我把问题隔离出来,就是点击之间的时间。当他们在两次点击之间等待足够长的时间时,数据总是能够通过,但如果他们没有等待足够长的时间,那就太糟糕了 所以我基本上确定了问题是javascript函数在运行时再次被调用,这是我不允许的。有没有一种方法可以在函数开始时锁定用户的浏览器,并在AJAX结束后解锁它?我知道这可能会激怒我的用户,但我
function addtolist(thisform, sdata)
{
var scntDiv = $('#p_data');
var request = $.ajax({ async: false, url: "php_addtolist.php", type: "POST", data: {data:sdata}, dataType: "html" });
request.done(function(msg) { outdata = parseInt(msg); });
$(outdata).appendTo(scntDiv);
}
您可以在调用函数时禁用该按钮,然后使用
complete
回调重新启用该按钮:
function addtolist(thisform, sdata)
{
$('#submit_btn').prop('disabled', true);
var scntDiv = $('#p_data');
var request = $.ajax({
async: false,
url: "php_addtolist.php",
type: "POST",
data: {data:sdata}, dataType: "html" },
complete: function() { $('#submit_btn').prop('disabled', false); }
);
request.done(function(msg) { outdata = parseInt(msg); });
$(outdata).appendTo(scntDiv);
}
基本上,似乎
outdata
是异步的。应该解决以下问题
function addtolist(thisform, sdata)
{
var scntDiv = $('#p_data');
var request = $.ajax({ async: false, url: "php_addtolist.php", type: "POST", data: {data:sdata}, dataType: "html" });
request.done(function(msg) {
outdata = parseInt(msg);
$(outdata).appendTo(scntDiv);
});
}
还应使
outdata
成为局部变量,而不是隐式全局变量。