第一次调用函数不会按预期工作,但下次会正常工作

calling a function on the first time won't work as expected, but next time is working

本文关键字:工作 下次 常工作 调用 第一次 函数      更新时间:2023-09-26

这是我的代码:

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('random');时,它确实可以工作。奇怪的是,数据确实包含正确的对象(通过查看测试进行检查(。

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

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

您应该简单地添加

var param, tagId, index;

showTrek函数的开头。