我有一个asp.net应用程序,我在其中使用jquery。 在我的jquery代码中,我有一个简单的ajax请求,如下所示:
var allowDelete = true;
$.ajax({
url: '...',
dataType: 'json',
type: 'post',
data: { something...}
})
.success(function (response) {
if (response.Passed) {
//do something
}
else {
//do something
allowDelete = false;
}
})
.error(function () {
// do something
});
if (allowDelete) {
//something
}
正如您所看到的,当我的Passed var值为false时,我想要一个var set false。 当我只运行没有任何断点的代码时,allowDelete var永远不会设置为false。当我在我设置allowDelete false的行旁边放置一个断点(在firebug中)时,它永远不会到达断点。但是当我在函数的beginnig中放置一个断点并通过整个ajax进行调试时,一切都运行得很好并得到我想要的结果。知道错误可能在哪里吗?
答案 0 :(得分:1)
因为你在一个多月前提出这个问题,所以可能会迟到,但希望有所帮助:
原因是AJAX是异步的: 1.将allowDelete设置为true。 2.你调用你的AJAX函数。它开始工作,转向你的服务器等。 3.检查allowDelete。这仍然是事实。 4.如果条件正常(响应未通过),则AJAX调用返回,将allowDelete设置为false。
因为异步,在调用AJAX函数后立即检查allowDelete,不等待答案(AJAX回调方法)。基本上,你的AJAX函数回调方法运行得太晚了。
当您使用断点时,您的AJAX调用有足够的时间从服务器获得答案,因此上面的第四点发生在第三点之前。