如何在已启动时阻止ajax调用?

时间:2011-08-24 12:05:15

标签: javascript jquery

假设有一个表格。提交表单时,我正在向服务器调用ajax请求。当它正在执行时,我不希望再次触发ajax调用。 一旦我完成了ajax调用,那么只能再次触发ajax调用。

我该如何实现?在这里,我想使用JQUERY库来实现它。

3 个答案:

答案 0 :(得分:2)

当函数运行时,将变量(在比启动Ajax调用的函数更宽的范围内)设置为值(例如true)。

回调运行时将其设置为不同的值。

如果在初始函数运行时已经设置,则立即返回。

var call_in_progress = false;

function myEventHandler(e) {
    if (call_in_progress) { return false; }
    call_in_progress = true;
    jQuery.ajax( etc etc myCallback );
}

function myCallback () {
    call_in_progress = false;
}

答案 1 :(得分:1)

你只需使用一些javascript变量即可。

操作开始时将其设置为true。 并在操作完成时再次将其设置为false。

如果任何并行操作开始,那应该检查它的值 变量和返回,如果没有做任何事情就是真的。

示例:

var myOperationLocks = new Array();

function formPostByAjax()
{
   /* check for lock */
   if(myOperationLocks['form_post'] == true)
       return ;

   /* set the lock */
    myOperationLocks['form_post'] = true;
    /* do some work */
    jQuery.post(url,data,function(response) 
    {
      /* do something with response , then release the lock */
      myOperationLocks['form_post']  = false ; 
    }

}

答案 2 :(得分:0)

保持启动Ajax请求时设置为TRUE的变量。通过在设置每个请求之前检查此变量。

为避免在遇到某些麻烦时执行操作,例如没有来自服务器的回复,如果问题不经常发生,您可以抛出“你真的想要”查询。您也可以让变量保持时间,如果时间超出某个限制,请再次允许它。但是请记住在Ajax完成后清除时间变量。