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功能的开始处