我自己完成的一个项目有一个问题。
我的控制器文件中有一个名为Expected spy navigate was not called
的全局变量。
hasVoted
这是我声明的文件。
window.hasVoted = false;
2控制台日志说var是import Tweenmax from 'gsap';
window.hasVoted = false;
import data_handler from "../database/data_handler";
import cookies from "./cookies";
import sectionHandler from './sectionHandler';
window.onload = () => {
// Cookies handler
window.COOKIES = cookies;
// Handler ajax request and display data
console.log(window.hasVoted);
data_handler.checkUserIp();
console.log(window.hasVoted);
if(window.hasVoted) {
console.log('here');
data_handler.getCharactersVote();
} else {
console.log('here 2');
sectionHandler.init();
data_handler.getCharactersList();
}
};
,但是当我在控制台日志对象窗口时,var似乎是false
。
我不知道为什么以及如何解决它。
如果您还有另一种方法,我会很高兴听到它!
这是true
data_handler.js
我试图将var放入window.load中,将var传递给函数参数,但没有任何效果...
感谢您的帮助。
编辑解决方案:
我必须在实际函数中添加一个Promise,然后使代码等待Promise被解决。
更改此checkUserIp() {
let xhttp,
request = `./database/database_handler.php?type=checkip`,
container = document.querySelector('.js-your-choice');
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = (e) => {
let event = e.currentTarget;
if (event.readyState == 4 && event.status == 200) {
if(event.responseText == ''){
window.hasVoted = false;
} else {
container.innerHTML = event.responseText;
window.hasVoted = true;
}
}
};
xhttp.open("GET", request, true);
xhttp.send();
},
通过这个window.onload = () => {
并在函数调用前添加window.onload = async () => {
:await
然后将功能修改为promise
await data_handler.checkUserIp();