我遇到了一个问题我似乎无法将我的大脑包裹起来,而且我也找不到任何其他这类在线示例, (再一次)这个美好的社区。
我不会通过陈述这个函数(和许多其他函数)在设计时一起工作时所做的所有事情来复杂化这个问题,但是,我会说这个函数(eventDayPlotter)在每个月的每一天都会重复。我不明白以下代码段中包含的结果。
function eventDayPlotter(day, gridMod, monthAdjust)
{
//Beginning of event day plotting.
isAnEvent = false;
$.getJSON("/JsonControl/Events.json", function (jsonObj)
{
for (var i = 0; i < jsonObj.events.length; ++i)
{
if(day == jsonObj.events[i].dateNumber && (navDate.getMonth() + monthAdjust) == (jsonObj.events[i].dateMonth -1) && navDate.getFullYear() == jsonObj.events[i].dateYear)
{
document.getElementById("cGrid" + gridMod).className="eventDay";
console.log(jsonObj.events[i].title)
document.getElementById("cGrid" + gridMod).onmousedown = function(){document.getElementById("eventBox").src="/Event htms/Event.htm"; document.getElementById("eventBox").document.getElementById("title").innerHTML = jsonObj.events[i].title;}
isAnEvent = true;
}
}
});
if(isAnEvent == true)
{
console.log("true")
}
if(isAnEvent == false)
{
console.log("false")
}
}
的console.log的结果(全部)
33false _main.js:1708
Okmulgee Public Schools County Professional Day _main.js:1696
Okmulgee Public Schools Starts 3rd Quarter _main.js:1696
Okmulgee Public Schools-Closed in Observance of Martin Luther King Jr. Holiday
第一个if分支,我也想到,要执行3次,但它是,因为你可以看到,如果分支(具有console.logs的分支)在$ .getJSON函数之外(一旦它们包含有意义的内容,它们在逻辑上需要成为它们)时,诊断一旦isAnEvent总是为false。我无法理解,因为它不以任何方式超出范围(据我所知)。
此外,我不希望文件中的后面的行先用console.log记录(在其他3行之前),但是看起来这个函数是向后执行的?我的意思是,我知道这不可能是真的,但这怎么可能呢?我在一个彻底的损失......
当在第一个if分支或其外部测试isAnEvent(仍在.getJSON函数中)时,它的值并不总是它应该是的(因为这不是它们的位置需要在逻辑上去),但它并不总是假的,但是,一旦.getJSON函数之外,它总是假的,即使它刚刚变为真。
很明显,这里发生了一些我无法理解的事情。
最后,在情况下,它并不明显,3件事情:
1)我抓住了JSON数据蛮好的,
2)分支应该isAnEvent设置为true,如果第一如果json文件中的任何日期与该日期匹配。然后在下一次调用eventDayPlotter时,它应该将isAnEvent重置为false,并以相同的方式测试下一个日期(传入参数)。
3)在控制台中没有显示脚本错误。
如果需要更多信息,请让我知道。
'$ .getJSON'是** **异步! – Bergi
AJAX是异步的。 “$ .getJSON”后面的代码不会等待它完成。 – jbabey
@所有的O ... I ... C。 – VoidKing