javascript - 第一次调用函数不会按预期工作,但下次可以工作

标签 javascript jquery ajax

这是我的代码:

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 删除,并且这个调用发生在 before 您传递给 $.getJSON 的第一个回调被执行,因为AJAX 调用是异步的。

你应该简单地添加

var param, tagId, index;

showTrek 函数的开头。

关于javascript - 第一次调用函数不会按预期工作,但下次可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17111591/

相关文章:

javascript - 如何确定脚本是否已包含在 Web Worker 中?

javascript - 在 PHP 变量中使用 Ajax 数据

javascript - 在 .includes() 中使用逻辑运算符——出现错误

javascript - 如何在 jQuery 函数中传递数组或添加循环

javascript - Pybossa JS - 获取 1 个任务时,taskLoaded() 函数执行两次

javascript - 如何获得不包括浏览器细节的计算 CSS?

javascript - Ramda 返回响应作为请求正文

Javascript/JQuery 在按钮组的两个按钮之间切换事件类

javascript - Bootstrap 模式中的动态内容和 Ajax [Laravel] 中的动态数据

ruby-on-rails - 如何在不使用表单的情况下从 Rails 应用程序发布到外部 url