1

这是我的代码:

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');在浏览器控制台中调用它时它也确实有效。奇怪的是数据确实包含正确的对象(通过查看测试检查)。

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

4

1 回答 1

6

那是因为您通过忘记关键字声明了您的 variables paramtagId并且是全局的。这使得它们的第一个值被第二次调用擦除,并且此调用发生您传递给的第一个回调执行之前,因为 AJAX 调用是异步的。indexvarshowTrek$.getJSON

你应该简单地添加

var param, tagId, index;

showTrek函数的开头。

于 2013-06-14T15:08:29.940 回答