ajax 的部分功能可以通过调试达到

Parts of ajax function can just be reached by debugging

我有一个 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 设置为 false。 当我只是 运行 没有任何断点的代码时,allowDelete var 永远不会设置为 false。当我在设置 allowDelete false 的行旁边放置一个断点(在 firebug 中)时,它永远不会到达断点。但是当我在函数的开头放置一个断点并调试整个 ajax 时,它一切正常并得到我想要的结果。知道错误可能在哪里吗?

因为你在 1 个多月前问过这个问题,可能来晚了,但希望对你有所帮助:

原因是AJAX是异步的: 1. 将 allowDelete 设置为 true。 2. 你调用你的 AJAX 函数。它开始工作,转向您的服务器等。 3.你勾选allowDelete。现在仍然如此。 4. AJAX 调用 returns,如果条件正常(响应未通过),则将 allowDelete 设置为 false。

因此,由于异步,allowDelete 在您调用 AJAX 函数后立即被检查,不会等待答案(AJAX 回调方法)。基本上,您的 AJAX 函数回调方法运行得太晚了。

当您使用断点时,您的 AJAX 调用有足够的时间从服务器获得答案,因此上面的第四点比第三点早发生。