2

我需要根据服务器结果启用或禁用点击事件。我使用 jquery 具有以下功能:

$("#button").click(function(){
   var validated = true;
   $.ajax({
       url:  "/Foo",
       type: "POST",
       success:function(data){
           // alert(validated);  ----> true
           if(data){
               validated = false;
               // alert(validated);  ----> false
           }
       }
   });
   // alert(validated); ----> true
   return validated;
});

在上面的代码中,总是返回 true。我认为问题在于我设置了错误的全局变量validated。我已经阅读了这篇文章这篇文章,但对我不起作用。我究竟做错了什么?

4

1 回答 1

1

问题是,AJAX 调用发生在与函数的其余部分不同的“线程”中。因此,具有单击事件的线程自行运行,执行异步完成的 AJAX 调用,然后返回。AJAX 线程永远没有时间修改已验证的变量 - 点击处理程序已经返回。

解决此问题的最佳方法是在 AJAX 线程内进行回调,或在 AJAX 线程本身内禁用您想要的元素,而不是将结果返回给另一个函数,然后该函数将在另一个线程中修改您的按钮。

于 2013-05-27T22:47:48.977 回答