我有一个javascript函数,当用户单击按钮并执行向我的数据库添加一些数据的AJAX查询时调用该函数。但是,我一直在抱怨大量数据尚未通过,我已将问题隔离为点击之间的时间。当他们在点击之间等待足够长的时间时,数据总会通过,但如果他们没有等待足够长的时间,那就是一个废话。
所以我几乎已经解决了问题是javascript函数在它已经运行时再次被调用,我不应该这样做。有没有办法可以在函数开头锁定用户的浏览器,并在AJAX结束后解锁它?我知道这可能会刺激我的用户,但我看不到任何其他解决方案。
这不是完全必要的,但这是我的javascript函数的样子:
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);
}
答案 0 :(得分:1)
您可以在调用该函数时禁用该按钮,然后使用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);
}
答案 1 :(得分:0)
基本上似乎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);
});
}