这是我的代码:
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');
时,它确实有效。
奇怪的是,数据确实包含正确的对象(通过查看测试来检查)。
编程时我感觉有点疯狂,有人能看到我的问题吗?
答案 0 :(得分:6)
这是因为您忘记了param
关键字,将变量tagId
,index
和var
声明为全局变量。这使得他们的第一个值被第二次调用showTrek
删除,并且此调用在之前发生传递给$.getJSON
的第一个回调,因为AJAX调用是异步的。
您只需添加
即可var param, tagId, index;
在showTrek
函数的开头。