我需要能够或禁用点击事件,具体取决于服务器结果。我使用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
。我看过this post和this,但对我不起作用。我做错了什么?
答案 0 :(得分:1)
问题是,AJAX调用发生在一个单独的“线程”中,而不是函数的其余部分。因此,具有click事件的线程自行运行,执行ASYNCHRONOUSLY的AJAX调用,然后返回。 AJAX线程永远没有时间修改已验证的var - 单击处理程序已经返回。
解决这个问题的最好方法是从AJAX线程中进行回调,或者在AJAX线程本身内禁用你想要的元素,而不是将结果返回给另一个函数,然后在另一个函数中修改你的按钮线程。