第一次调用函数不会按预期工作,但下次会正常工作
calling a function on the first time won't work as expected, but next time is working
这是我的代码:
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
关键字,将变量param
、tagId
和index
声明为全局变量。这使得它们的第一个值被对showTrek
的第二次调用擦除,并且此调用发生在您传递给$.getJSON
的第一个回调执行之前,因为 AJAX 调用是异步的。
您应该简单地添加
var param, tagId, index;
在showTrek
函数的开头。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- 第一次调用函数不会按预期工作,但下次会正常工作
- JQueryAjax只在按下提交和下次刷新页面时工作一次
- 函数调用只工作一次,但下次不工作