Javascript 第一次调用函数不会像预期的那样工作,但下一次就可以了

Javascript 第一次调用函数不会像预期的那样工作,但下一次就可以了,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是我的密码: treksID=[]; recommendedTrekId=2; $(document).ready(function(){ showTrek('random'); showTrek(recommendedTrekId); }); function showTrek(filter){ if (filter=="random"){ param={action:'getShortTrek'}; tagId="#random"

这是我的密码:

treksID=[];
recommendedTrekId=2;

$(document).ready(function(){
    showTrek('random');
    showTrek(recommendedTrekId);
});

function showTrek(filter){
    if (filter=="random"){
        param={action:'getShortTrek'};
        tagId="#random";
        index=1;
    }
    else {
        param={action:'getShortTrek', Trek_Id:filter};
        tagId="#recommend";
        index=0;
    }
    $.getJSON('php/treks.php',
        param,
        function(data){
            $(tagId).find('h3').html(data[0].Trek_Name);//PROBLEM
            treksID[index]=data[0].Trek_Id;//PROBLEM
            if (filter=='random') {alert('debug'); test=data;}//DEBUG
        }
    );
}   
第一次调用showTrek时,它会按预期完成所有操作,但第二次使用//PROBLEM标记的两行有问题的代码不起作用。 在那之后,当我称showTrek为“随机”时;在浏览器控制台中,它确实起作用。 奇怪的是,数据确实包含了通过查看测试检查的正确对象


编程时我感觉有点疯狂,有人能看到我的问题吗?

这是因为您忘记了var关键字,将变量param、tagId和index声明为全局变量。这使得它们的第一个值在第二次调用showTrek时被擦除,并且此调用发生在您传递给$.getJSON的第一次回调执行之前,因为AJAX调用是异步的

您只需添加

var param, tagId, index;

在showTrek函数的开头。

这是因为您忘记了var关键字,将变量param、tagId和index声明为全局变量。这使得它们的第一个值在第二次调用showTrek时被擦除,并且此调用发生在您传递给$.getJSON的第一次回调执行之前,因为AJAX调用是异步的

您只需添加

var param, tagId, index;
在showTrek功能的开始处