0

別の関数の内部にあるreturnajaxコールバック関数から返された配列を取得するのに問題があります。最初のサイクルで配列データが受信されないという問題があります。

              var testFile = $("#selection").val();
              var testData = getTestData(testFile); 
              alert(testData); // not working during the first time I run the function, empty


              function getTestData(testF)
              {
                  var testArray = [];

                  $.getJSON("test.php",{fileTest: testF}, function(data)
                  {
                         $.each(data, function(index, value)
                         {
                              if(value == "")
                              {
                              }else
                              {
                                 testArray[index] = value;
                              }
                         }
                   });
                   alert(testArray); // working I see the values
                   return testArray; // not working the first time running this function
              }
4

1 に答える 1

0

Ajax 呼び出しは非同期です。どういう意味ですか?

呼び出すとHTTP リクエストが開始される$.getJsonだけで、すぐには入力されません。代わりに、HTTP 要求が完了した後、将来の特定されていない時点で入力されます。testArraytestArray

アラートの 1 つが表示され、他のアラートが表示されない理由は単純です。最初のアラートの [OK] ボタンをクリックするまでに、リクエストは終了し、回答の準備ができています。最初に表示された(失敗した) アラートは、実際には 内のアラートであると確信していますgetTestData。考えられる一連のイベントは次のとおりです。

  1. あなたが呼ぶgetTestData()
  2. で HTTP リクエストを開始します$.getJSON()
  3. 内部のalert(testArray) getTestDataが呼び出され、アラートが表示されます。testArrayまだ入力されていないため、空の配列があります。
  4. 座ってアラートを見ている間に、$.getJSON()通話が完了し、testArray.
  5. 警告ボックスで [OK] をクリックします。
  6. return testArray;が実行され、入力された値が返されます
  7. オンラインalert3 が実行され、配列が表示されます
于 2012-11-07T17:08:23.030 に答える