0

私は次のことを達成しようとしています:

1) for ループで製品リストを調べ、各製品で requestCrossDomain() 関数を呼び出します。

2) 関数 requestCrossDomain() は、取得した各製品の 3 セットの属性/説明を requestCross Domain() 関数に渡します。

3) requestCrossDomain() 関数が完了したら、ループ クロージャ関数を使用して属性/説明の結果を調べ、3 つの配列を作成します。この関数は一度に 1 つの製品で機能する必要があることを知っておくことが重要です。つまり、for ループが製品 [0] にある場合、コールバック関数は製品 [0] の属性/説明セットでも機能する必要があります。

4) if() ステートメントを使用して一致するセットを見つけ、配列/オブジェクトのインデックス位置を返します。

私は 3) で立ち往生しています。ループ クロージャは console.log に何も返さないようです。

//step 1)
for (i=0; i<product.length; i++){
   ....       
   requestCrossDomain(arg[i], function(i) {   //step 3)
                                              //need to hold the i value 
      return function() {                     //so the return function() is working on 
         var array = [];                      //the matching product[i]
         $('h4').each(function(j) { 
            array[j] = [];
            var $this = $(this);
            array[i][j] = {
               Attribute: $this.text(),
               Description: $this.next('p').text()
            };

            //step 4)
            if($this.text() == "Attr" && $this.next('p').text() == "Desc") {  
                console.log(i + "-" +j);  //nothing return, no error message
            };
         });          
      }; 

   }(i));
}

//step 2)
function requestCrossDomain(arg, callback) {
   ....
   // 3 sets of attribute/description are constructed here, the html will look like:
   // <div>
   //   <h4>Attribute</h4>
   //   <p>Description</p>
   //   <h4>Attr</h4>
   //   <p>Desc</p>
   //   <h4>A</h4>
   //   <p>D</p>
   // </div>    
   ....
   callback();
}

forループを使用したコールバック関数を完全に理解していないと思います。私の頭は数時間ぐるぐる回っています。誰か光を当てることができますか? ありがとう!

4

1 に答える 1

0

配列が正しく初期化されていないと思います。そもそも入れるつもりだったのか

array[i] = []; //instead of array[j] right after $('h4').each(function(j) {

? コードの意味が少しわかるからです。それを変更してから追加すると

array[i][j] = [];

次の行として、私はあなたが行ってもいいと信じています. 教えてください.

また、console.log("Step X"); を配置してみてください。tatステップに到達したことを確認するステップにコメントしたすべての場所で、すべてのステップに到達したかどうか/どのステップが中断したかを確認します。

于 2013-02-03T17:12:26.683 に答える