Javascript函数在仍在运行时再次被调用

时间:2014-06-09 22:07:57

标签: javascript jquery ajax locking

我有一个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);
}

2 个答案:

答案 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);
     });

}