2012-03-29 21 views
0

誰かが私に空の文字列を与える理由を教えてもらえますか? $.get()コールバック関数のconsole.log(contentArray)をコールするとデータが表示されますが、以下のコードのどこにあるかを調べようとすると、結果は空になります。.get呼び出しでjQueryの.pushを呼び出すと、空の結果が返されます。

sectionArray = []; 
contentArray = []; 
$(function() { 
    if (index == 1) { 
     $('menu:eq(' + (section - 1) + ') li a').each(function() { 
      sectionArray.push($(this).attr('href')); 
     }); 

     var len = sectionArray.length; 

     for (var i = 0; i < len; i++) { 
      href2 = sectionArray[i]; 

      $.get(href2, function (data) { 
       string = data.toString(); 
       contentArray.push(string); 
      }); 
     } 
     content = contentArray.toString(); 
     console.log(content); 
    } 

答えて

2

あなたが呼び出した後AJAXリクエストが終了したのでconsole.log()これを試してみてください。

$.get(href2, function(data){ 
    string = data.toString(); 
    contentArray.push(string); 
    content = contentArray.toString(); 
    console.log(content); 
}); 

もループ内でAJAXリクエストを行う行うための最善のことはされていません。それはあなたが望むように働きません。

UPDATE:

もjQueryがfalseに設定asyncオプションを持っており、あなたのコードは動作するはずですが、遅い動作します。同期リクエストによってブラウザが一時的にロックされることがあります。問題は、あなたの$.get() AJAXリクエストが非同期を実行していることである

var countRequests = len; 
$.get(href2, function(data){ 
    string = data.toString(); 
    contentArray.push(string); 
    countRequests = countRequests - 1; 
    if (countRequests == 0) { 
     content = contentArray.toString(); 
     console.log(content); 
     // or create callback 
    } 
}); 
+0

、 $に.get(href2、機能(データ){ コンテンツので、 = contentArray.push(データ); console.log(コンテンツ); }); が動作します。 私は$に.get試み(href2、関数(データ){ ストリング= data.toStringを(); contentArray.push(列); })。 content = contentArray.toString(); console.log(content); しかし、それは動作しません。 – Psylant

+0

'.push()'が 'console.log()'の後に来るので – Vytautas

+0

私は複数のページからデータを収集して1ページにドロップする必要があるので、 – Psylant

1

UPDATE 2

多分このような何か(:D多分あまりよくないアイデアを)してみてください。 、$.get()関数は応答を待たずに、すぐにを返し、ループのためのあなたの全体が、(複数のAJAXリクエストをキューイング)が完了され

、そしてあなたのconsole.log()は、配列が空のままで、その時点で発生します。それ以降は、Ajaxレスポンスがどのくらい速く返ってくるかにかかわらず、Ajax成功ハンドラのどれかが呼び出されます。

編集:ここでは、すべてのAJAX呼び出しが完了した後に何かをする方法を示して別の質問から答えは:作品https://stackoverflow.com/a/6250103/615754

+0

ああ、意味があるので、if文を実行してforループが終了した後に実行する必要があります。 – Psylant

+0

いいえ、成功したコールバックが実行される前にforループが確実に終了し、console.log()をコールバックに移動して受け取ったレスポンスの数を維持しない限り、ifステートメントは機能しません。私がリンクしている答えを見て、$ .when()メソッドを読んでください。 – nnnnnn

+0

それは実際にそれを行うには本当に良い方法です。ありがとう – Psylant

関連する問題