2

递归setTimeout函数 getRandomProductsonload在 html body 标签中被调用,因此不断迭代。正在从导航栏的嵌套 ul 中的链接

调用函数 setCategoryTree 。然后,此函数将变量 mainCategory 传递给 getRandomProducts,其中全局声明变量以维护其初始化。...所以,我要做的是在导航栏中单击链接时重置 getRandomProducts 函数,并从单击的链接传递类别名称。但是,似乎没有工作,因此迭代发生得更频繁,因为有多个递归循环同时执行。onclick

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);
}
4

1 回答 1

1

您正在t函数中设置变量。下次调用此函数时t,您将无法使用该 var。

因此,在函数上方设置变量(不在里面)

var randomProductsTimeout = false;

function getRandomProducts(category){

    randomProductsTimeout = setTimeout()[..]
于 2012-04-10T07:32:43.207 回答