Javascript fcount未定义

Javascript fcount未定义,javascript,jquery,wcf,Javascript,Jquery,Wcf,我有一个用于缓存或临时存储的变量,以避免对服务器的重复请求: var div2acc = {}; 还有一个函数,它从WCF服务获取数组或从我的div2acc对象读取数组: function getAccounts(div_id){ if(!div2acc.hasOwnProperty(div_id)){ $.ajax({ url: "/Services/OG.svc/GetListOfAccount

我有一个用于缓存或临时存储的变量,以避免对服务器的重复请求:

var div2acc = {};
还有一个函数,它从WCF服务获取数组或从我的div2acc对象读取数组:

function getAccounts(div_id){
        if(!div2acc.hasOwnProperty(div_id)){
                $.ajax({
                        url: "/Services/OG.svc/GetListOfAccounts",
                        data: { moduleId: mod_id, divisionCode: div_id },
                        success: function(data){
                                        div2acc[div_id] = data;
                        }
                });
        }

        $("#pnlAccounts").setTemplate( $("#tplAccounts").html() );
        //alert(div2acc[div_id]);
        $("#pnlAccounts").processTemplate(div2acc[div_id]);
        $("#pnlAccounts > ol > li").click(function () {
                addDesignation($(this).attr("id"), $(this).text(), "");
        });
}
它检查div_id是否是定义的属性,该属性将包含从数据变量复制的帐户数组。然后,它启动jTemplates并传递存储在div2acc[div_id]属性中的数据

奇怪的是,第一次使用某个div_id启动getAccounts时,我在Firebug中得到了一个“fcount is undefined”。第二次,它可以正常工作并解析模板。我决定在处理模板之前插入一个警报(),看看哪个div2acc[div_id]被传递到processTemplate()。事实证明,在第一次调用getAccounts(div_id)时,div2acc[div_id]始终是未定义的,但在第二次调用时,就可以了。更奇怪的是,当我插入alert()本身时,“fcount is undefined”错误不再显示,并且在第一次尝试时,就在我单击“alert”窗口中的“OK”之后解析模板


我显然误解了这里的某些内容。

这消除了问题,我认为这与范围有关,但我仍然不理解。但是,这会产生另一个问题,即仅当div2acc[div_id]属性不存在时才会呈现模板。但是,我希望每次都能呈现该模板——如果尚未呈现,只需从服务器请求它(然后通过div2acc属性缓存它)。这就是为什么我首先从if()子句中删除了这些行。太好了,这很有效。你能解释一下为什么我的div2acc没有立即设置它的属性,需要再次调用getAccounts(div_id)。我只是不确定这里发生了什么——试图理解范围界定问题。
function getAccounts(div_id) {
    if (!div2acc.hasOwnProperty(div_id)) {
        $.ajax({
            url: "/Services/OG.svc/GetListOfAccounts",
            data: {
                moduleId: mod_id,
                divisionCode: div_id
            },
            success: function (data) {
                div2acc[div_id] = data;
                getAccounts(div_id);
            }
        });
    } else {

        $("#pnlAccounts").setTemplate($("#tplAccounts").html());
        //alert(div2acc[div_id]);
        $("#pnlAccounts").processTemplate(div2acc[div_id]);
        $("#pnlAccounts > ol > li").click(function () {
            addDesignation($(this).attr("id"), $(this).text(), "");
        });
    }
}