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(), "");
});
}
}