0

我在 JQuery AJAX 中有一个奇怪的问题..

我的步骤顺序如下:

1)我有一个 JS 函数,我在按钮单击事件上调用它:

 function Click()
 {

    //I am performing some Validations then making an AJAX Request:

   $.ajax({
      type: "POST", 
      url: url, 
      context: window, 
      data: datatoPost,
      contentLength: contentLength, 
      async: true, 
      success: function (response) { 
          callbackFn(response); 
       },
      error: function (msg) { 
          this.error = msg;
       }
    });

   // The callback function is called on Successfull AJAX Request 
   // i.e. callbackFn (See below)

   // I am then checking the window.IsValid which I have set in below function;

   if (window.IsValid == true) {
           // Then Perform another AJAX Request
     }
     else {
         // do nothing
     }
  }


  function callbackFn(response)
  {
     if(response == 'Valid')
     {
         window.IsValid = true;
     }
     else 
     {
         window.IsValid = false;
     }
  }

2) 现在,问题是当服务器正在处理第一个 AJAX 请求时,之后编写的代码即 if (window.IsValid == true) { // 然后执行另一个 AJAX 请求 } else { // 什么都不做 } } 被执行

3)我得到window.IsValid = false作为第一个 AJAX 请求的回调函数,即callbackFn(response)尚未调用,即使在第一个 AJAX 请求的有效响应之后,我的第二个 ajax 请求也没有作为window.IsValid变量执行在回调函数中设置,因为由于服务器正在处理请求,尚未调用回调。

请帮助我,我被卡住了..

4

2 回答 2

2

然后你应该使用

async: false,

在你的ajax函数调用中。不推荐哪个。更好的办法是使用

if (window.IsValid == true) {
           // Then Perform another AJAX Request
     }
     else {
         // do nothing
     }
  }

在您的回调函数中。

于 2013-01-02T15:57:54.350 回答
2

因为您的帖子是异步的,所以脚本会在处理 ajax 请求的同时继续执行。

相反,您需要将 window.IsValid 的测试移动到成功函数中:

function Click()
{
   //I am performing some Validations then making an AJAX Request:

   $.ajax({
      type: "POST", 
      url: url, 
      context: window, 
      data: datatoPost,
      contentLength: contentLength, 
      async: true, 

      success: function (response) { 
          callbackFn(response); 

          if (window.IsValid == true) {
              // Then Perform another AJAX Request 
              // best done as another function.
          }
          else {
              // do nothing
          }
       },

      error: function (msg) { 
          this.error = msg;
      }
   });
}
于 2013-01-02T15:58:14.000 回答