再帰setTimeout
関数 getRandomProducts はonload
html body タグで呼び出されるため、常に反復されます。
関数 setCategoryTree はonclick
、ナビゲーション バーのネストされた ul 内のリンクから呼び出されています。次に、この関数は変数 mainCategory を getRandomProducts に渡します。ここで、変数はその初期化を維持するためにグローバルに宣言されます。
...だから、私がやろうとしているのは、ナビゲーションバーでリンクがクリックされたときに getRandomProducts 関数をリセットし、クリックされたリンクからカテゴリ名を渡すことです。ただし、clearTimeout
機能していないように見えるため、複数の再帰ループが同時に実行されるため、反復がより頻繁に発生します。
それだけでなく、グローバル変数が setCategoryTree からのデータを意図したとおりに格納していません (基本的に、静的変数と同様にグローバル変数を使用しようとしています)。window.alert
コメント アウトされているで、このすべての動作を確認しました。
関連する Javascript コードは次のとおりです。
var mainCategory = ""; // initialized from setCategoryTree
var category = mainCategory;
function getRandomProducts(category)
{
//window.alert(category);
if(typeof category == "undefined")
category = "all";
else
clearTimeout(t);
var req = new XMLHttpRequest();
var products = document.getElementById("products");
req.onreadystatechange = function()
{
if( (req.readyState == 4) && (req.status == 200) )
{
var result = req.responseText;
products.innerHTML = result;
}
}
req.open("GET", "default.php?category=" + category, true);
req.send(null);
var t = setTimeout("getRandomProducts()", 1000);
}
function setCategoryTree(link)
{
var categoryTree = document.getElementById("categoryTree");
/* climbing the DOM-tree to get the category name (innerHTML of highest "a" tag) */
mainCategory = link.parentNode.parentNode.parentNode.getElementsByTagName("a")[0].innerHTML;
var subcategory = link.innerHTML;
categoryTree.innerHTML = "-- " + mainCategory + " -- " + subcategory;
getRandomProducts(mainCategory);
}