Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数仍在运行时再次被调用_Javascript_Jquery_Ajax_Locking - Fatal编程技术网

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

Javascript函数仍在运行时再次被调用,javascript,jquery,ajax,locking,Javascript,Jquery,Ajax,Locking,我有一个javascript函数,当用户单击一个按钮并执行一个AJAX查询,向我的数据库添加一些数据时,就会调用该函数。然而,我一直收到很多抱怨,说很多数据都没有通过,我把问题隔离出来,就是点击之间的时间。当他们在两次点击之间等待足够长的时间时,数据总是能够通过,但如果他们没有等待足够长的时间,那就太糟糕了 所以我基本上确定了问题是javascript函数在运行时再次被调用,这是我不允许的。有没有一种方法可以在函数开始时锁定用户的浏览器,并在AJAX结束后解锁它?我知道这可能会激怒我的用户,但我

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

您可以在调用函数时禁用该按钮,然后使用
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
成为局部变量,而不是隐式全局变量。