私は次のことを達成しようとしています:
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ループを使用したコールバック関数を完全に理解していないと思います。私の頭は数時間ぐるぐる回っています。誰か光を当てることができますか? ありがとう!