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)最初の AJAX 要求のコールバック関数、つまりcallbackFn(response)がまだ呼び出されていないため、 window.IsValid = falseを取得します。最初の AJAX 要求の有効な応答の後でも、2 番目の 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 のテストを success 関数に移動する必要があります。

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 に答える