-2
$(document).ready(function () {
    $('.out').each(function(index) {
       .ajax({                      
          url: "php,
          type: "GET",
          success: function(data) {
          // LOOP each dynamic textbox for my specific validation
         console.log('1'); // flag if any error
       }
    });

    // I though this will run after  $('.out').each()
    console.log('2'); // my plan is to check if atleast 1 error occur
});

result:
> 2
> 1
> 1
> 1

instead of:
> 1
> 1
> 1
> 2

フローは次のようになると思いました。最初に each 関数を実行すると、1 1 1 などが表示され、その後 2 が表示されます。

前もって感謝します

4

2 に答える 2

1

コードの構文エラーを修正したと仮定します($.ajaxに欠落"している、url値に欠落});している、$.ajax呼び出しの終了に欠落している、および私が見つけられなかった他のエラー):

$(document).ready(function () {
    $('.out').each(function(index) {
       $.ajax({                     
          url: "php",
          type: "GET",
          success: function(data) {
            // LOOP each dynamic textbox for my specific validation
            console.log('1'); // flag if any error
          }
       });
    });

    console.log('2'); // my plan is to check if atleast 1 error occur
});

次に、ready関数内のステートメントが実行される順序は、最初に各要素.each()を呼び出し、最後にが実行されてready関数が完了し、その後成功関数が各Ajaxリクエストに対して呼び出されます。Ajax応答がブラウザによって受信される順序で、これは必ずしもAjax要求が行われた順序と同じではありません。(明らかに、これは実際に成功していることを前提としています。)$.ajax()'.out'console.log('2')

これは、Ajaxリクエストが(想定される)非同期であるためです。(Webワーカーを無視して)JavaScriptはマルチスレッドではないため、応答の受信速度に関係なく、応答コールバックは現在のコードブロックの終了後に常に呼び出されます。

于 2012-08-01T04:46:06.937 に答える
1

前述のとおり、Ajax は非同期です。つまり、success 関数が呼び出される前に、console.log('2') ステートメントが実行される可能性があります。

次のようなことを試してください:

$(document).ready(function () {
    $('.out').each(function(index) {
       $.ajax({                      
          url: "yourUrl.php",
          type: "GET",
          success: function(data) {
              // LOOP each dynamic textbox for my specific validation
              console.log('1'); // flag if any error
          },
          complete: function (jqXHR, textStatus){
              //This will be be called when the request finishes 
              //(after success and error callbacks are executed)
              console.log('2'); // my plan is to check if atleast 1 error occur
          }
       });
    });
});

jQuery ajax 呼び出しをよりよく理解するには、こちらをご覧ください: http://api.jquery.com/jQuery.ajax/

于 2012-08-01T03:25:06.113 に答える