我有以下 JS 代码,它检查网页以查看是否定期在其上发布新 key 。现在的问题是:
何时
start()
直接从开发控制台(F12)调用,结果是正确的,当我的函数$(document).ready
时称之为结果是错误的,是的,我已经确认了 100 次,页面上的内容没有发生变化。我只是想看看变量是否不同步,所以我调用
start()
$(document).ready
2 次,结果仍然错误,但是当我打电话satrt()
时来自 F12 (从$(document).ready
调用它 20 次后,我得到了正确的结果。我已经确认所有事件都在等待彼此完成(可能称为
synchronous
),并且任何单个语句都在不同线程中运行是不正确的。
那么如果F12
怎么可能呢?调用它,那么它是正确的,如果 $(document).ready
称其为错误。
需要注意的一个有趣的点:
当我没有$(document).ready
时在我的代码中,我调用 wow()
来自start()
这也给了我错误的结果,但 F12 给出了正确的结果。
现在我有 $(document).ready
,如果我打电话start()
从中又调用 wow()
给了我错误的结果,但现在如果我打电话 start()
从我的控制台,它给了我正确的结果!
我真正想要以更简单的形式做的事情:
- 等待页面完成加载
- 调用
wow()
- 等待
wow()
完成 - 重新加载页面
相同的过程在无限循环中继续。
谦虚感谢您的帮助,这已经浪费了我近 5-6 个小时的时间!
JS代码:http://pastebin.com/9UJYdepU
编辑:
正确输出:
a.js:136 Started
a.js:33 Called Wow
a.js:83 ---------------------KEY 7.0----------------
a.js:83 ---------------------KEY 7.1----------------
a.js:83 ---------------------KEY 7.2----------------
a.js:102 LAST used keys : Saab,Volvo,BMW,4E69G-8GNG4-JCZ4Z,H63HQ-VHWPX-ZCJ8J,FKZGK-MXL5C-P2YTE,4E69G-xxxxxx-JCZ4Z,4E69G-AAAxx-JCZ4Z,4E69G-AAAxx-JasasCZ4Z,4E69G-AAAxx-JasaaaasCZ4Z
a.js:140 WOWO DONW
输出错误:
Started
a.js:33 Called Wow
a.js:102 LAST used keys : Saab,Volvo,BMW,4E69G-8GNG4-JCZ4Z,H63HQ-VHWPX-ZCJ8J,FKZGK-MXL5C-P2YTE,4E69G-xxxxxx-JCZ4Z,4E69G-AAAxx-JCZ4Z,4E69G-AAAxx-JasasCZ4Z,4E69G-AAAxx-JasaaaasCZ4Z
a.js:140 WOWO DONW
document.getElementsByTagName("p");
给出:http://pastebin.com/JXQ9483N
localStorage.getItem("usedp")
给予Saab,Volvo,BMW,4E69G-8GNG4-JCZ4Z,H63HQ-VHWPX-ZCJ8J,FKZGK-MXL5C-P2YTE,4E69G-xxxxxx-JCZ4Z,4E69G-AAAxx-JCZ4Z,4E69G-AAAxx-JasasCZ4Z,4E69G-AAAxx-JasaaaasCZ4Z
最佳答案
终于解决了!这都是因为邪恶的 Jquery(抱歉,如果我伤害了你)。
$(document).ready 在页面开始加载时触发,而不是在加载完成时触发,我的替代解决方案是:
var myVar = setInterval(function(){ chk() }, 500);
function chk(){
if(document.readyState=="complete"){
clearInterval(myVar);
startt();
}
}
关于javascript - 函数内部调用函数时的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33194316/