设置AJAX回调函数内的变量

Set variable inside AJAX callback function

本文关键字:变量 函数 AJAX 回调 设置      更新时间:2023-09-26

我需要根据服务器结果启用或禁用单击事件。我使用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。我读过这篇文章,但不适合我。我做错了什么?

问题是,AJAX调用发生在一个单独的"线程"中,而不是函数的其余部分。因此,具有click事件的线程自己运行,执行异步完成的AJAX调用,然后返回。AJAX线程永远没有时间修改已验证的变量——click处理程序已经返回。

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