第一次调用函数将无法按预期工作,但下次工作正常

时间:2013-06-14 15:06:27

标签: 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');时,它确实有效。 奇怪的是,数据确实包含正确的对象(通过查看测试来检查)。

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

1 个答案:

答案 0 :(得分:6)

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

您只需添加

即可
var param, tagId, index;

showTrek函数的开头。