假设有一个表单。提交表单时,我正在向服务器调用一个ajax请求。当它正在执行时,我不希望再次触发ajax调用。 一旦我完成了ajax调用,只有ajax调用可以再次触发。如何在已经启动时阻止ajax调用?
我该如何执行此操作?在这里我想使用JQUERY库来实现这一点。
假设有一个表单。提交表单时,我正在向服务器调用一个ajax请求。当它正在执行时,我不希望再次触发ajax调用。 一旦我完成了ajax调用,只有ajax调用可以再次触发。如何在已经启动时阻止ajax调用?
我该如何执行此操作?在这里我想使用JQUERY库来实现这一点。
设置一个变量(在一个范围比初始化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;
}
嗨@Quentin,我找到了类似这样的东西 '$(“p”)。click(function(event){ event.stopPropagation(); // do something }); ' 这会在这方面有所帮助吗? – Abhishek
你可以简单地用一些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 ;
}
}
嗨Dhruv,我很感谢你的清晰和明确的答案。 是否有任何AJAX设置可以在jQuery中完成,它可以自动解决这个问题? JavaScript标志变量并不是一个“写得更少,做得更多”的方法。 – Abhishek
嗨@DhruvPathak,我发现像这样的$(“p”)。click(function(event){event.stopPropagation(); // do something});'这在这种情况下会有帮助吗? – Abhishek
是的,我认为,但你必须通过文档。 – DhruvPathak
保持一个当Ajax请求启动时设置为TRUE的变量。在每个请求被设置之前通过检查这个变量。
为了避免对某些麻烦(如服务器没有回复)进行查杀操作,如果问题不经常发生,您可以抛出一个“你真的想查询”的查询。你也可以让变量保持时间,如果时间超过某个限制,再次允许它通过。但请记住在Ajax完成后清除时间变量。
JavaScript变量怎么样:) – naveen
当然,我不是在问PHP变量.P 只是想知道从像你这样的有经验的人那里获得最好的方法是什么。 :) – Abhishek
没有双关意图。我提到了像昆廷的答案。 – naveen