2011-08-24 26 views
0

假设有一个表单。提交表单时,我正在向服务器调用一个ajax请求。当它正在执行时,我不希望再次触发ajax调用。 一旦我完成了ajax调用,只有ajax调用可以再次触发。如何在已经启动时阻止ajax调用?

我该如何执行此操作?在这里我想使用JQUERY库来实现这一点。

+0

JavaScript变量怎么样:) – naveen

+0

当然,我不是在问PHP变量.P 只是想知道从像你这样的有经验的人那里获得最好的方法是什么。 :) – Abhishek

+0

没有双关意图。我提到了像昆廷的答案。 – naveen

回答

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; 
} 
+0

嗨@Quentin,我找到了类似这样的东西 '$(“p”)。click(function(event){ event.stopPropagation(); // do something }); ' 这会在这方面有所帮助吗? – Abhishek

1

你可以简单地用一些javascript变量来做到这一点。

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

如果任何并行操作开始,那么应该检查该变量的值,如果没有做任何事情,则返回true。

例如:

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 ; 
    } 

} 
+0

嗨Dhruv,我很感谢你的清晰和明确的答案。 是否有任何AJAX设置可以在jQuery中完成,它可以自动解决这个问题? JavaScript标志变量并不是一个“写得更少,做得更多”的方法。 – Abhishek

+0

嗨@DhruvPathak,我发现像这样的$(“p”)。click(function(event){event.stopPropagation(); // do something});'这在这种情况下会有帮助吗? – Abhishek

+0

是的,我认为,但你必须通过文档。 – DhruvPathak

0

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

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

相关问题