在$中测试布尔变量时出现奇数结果.getJSON函数
Odd results when testing boolean variable within $.getJSON function
我遇到了一个问题,我似乎无法将我的大脑围绕起来,因为我在网上找不到任何其他类似的例子,我(再次)转向这个优秀的社区。
我不会通过说明这个函数(以及许多其他函数)在一起工作时设计的所有功能来使这个问题过于复杂,但是,我会说这个函数(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次,但是,正如您所看到的,一旦诊断if分支(带有console.logs的分支)在$之外,它就会被执行3次。函数(一旦它们包含有意义的内容,它们在逻辑上就需要在这里)isAnEvent总是false。我不能理解,因为(据我所知)它并没有超出范围。
另外,我不希望文件中后面的行首先用console.log记录(在其他3行之前),但似乎这个函数是向后执行的?我知道这不可能是真的,但这怎么可能呢?我完全不明白……
当测试isAnEvent在第一个if分支内或只是在它之外(仍然在. getjson函数内),它的值并不总是它应该是什么(因为这不是逻辑上需要去的地方),但它也不总是假的,然而,一旦在. getjson函数外,它总是假的,即使它刚刚变成真。
显然这里发生了一些我无法理解的事情。
最后,如果不是很明显,有三件事:
1)我正在抓取JSON数据很好,和
2)第一个if分支应该设置isAnEvent为true,如果json文件中的任何日期匹配该日期。然后,下一次调用eventDayPlotter时,它应该将isAnEvent重置为false,并以同样的方式测试下一个日期(带参数传入)。
3)控制台没有显示脚本错误。
如果需要更多的信息,请告诉我。
getJSON()
是异步的。这意味着它在eventDayPlotter()
完成后完成并调用它的完成函数。
因此,只能在补全函数内部测试isAnEvent
的值。你不能在eventDayPlotter()
的末尾测试它的值。
仅供参考,您可以通过在自执行的函数闭包中捕获i
来修复事件处理程序中的值:
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)
(function(index) {
document.getElementById("cGrid" + gridMod).onmousedown = function(){document.getElementById("eventBox").src="/Event htms/Event.htm"; document.getElementById("eventBox").document.getElementById("title").innerHTML = jsonObj.events[index].title;}
})(i);
isAnEvent = true;
}
}
});
}
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 函数式javascript读取、异步、写入结果
- 函数hide()、prev()、show()被组装以获得所需的结果,但无法理解其工作原理
- JScript 错误: 无法分配给函数结果
- 仅在第一个结果中显示/隐藏MySQL结果函数
- 从Mongoose结果匿名函数返回父函数
- MeteorJS从上一个函数中检索JS中的结果
- 如何在函数外返回此操作的结果
- 将web服务回调的结果绑定到Javascript中的调用函数
- 原型中漂亮的代码,如何省略'不是函数'空结果选择器上的错误
- 如何在使用函数document.write()打印最终结果后,使用Javascript滚动到页面顶部
- 为什么我的javascript地理编码函数返回空白结果
- toFixed javascript函数给出奇怪的结果
- Node Express Handlebars帮助程序未返回函数的结果
- 正在等待HTTP调用从函数返回结果
- 如何根据JavaScript函数的结果用PHP编写数据库?(FB应用程序)
- Firebase 使用外部查询结果函数
- Javascript 全局数组在 JSON 结果函数中不可见