我遇到了一個問題我似乎無法將我的大腦包裹起來,而且我也找不到任何其他這類在線示例, (再一次)這個美好的社區。
我不會通過陳述這個函數(和許多其他函數)在設計時一起工作時所做的所有事情來複雜化這個問題,但是,我會說這個函數(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