使用 Mac OS X 10.8.4、Chrome 27(最新稳定版)。
我有一个脚本,每隔 X 秒(使用setInterval()
)使用 jQuery 进行一次 AJAX 调用,以查看是否仍有与服务器的连接(心跳)。它发布一些数据,并根据它是否成功,调用其他函数。
它工作正常,直到我的 Mac 进入睡眠状态(屏幕黑屏、硬盘断电等),我将其唤醒,AJAX 调用失败并尝试调用一个显然不再存在的函数(变量):
POST http://mywebsite.com/index.php jquery.min.js:4
Uncaught TypeError: Cannot call method 'onLost' of undefined
onLost
是其他变量中的函数,例如mylib
和anotherlib
。它们在加载页面的早期就被实例化了。代码要复杂得多,但这里有一个简化版本:
var mylib = new mylib();
mylib.anotherlib = function() { this.onLost = function() { ... }}
setInterval() { function() { $.ajax({ failed: mylib.anotherlib.onLost }); }, 10000);
错误发生后,我的脚本表现正常。它可以访问mylib
并且onLost()
很好。我知道浏览器实现setTimeout()
以及setInterval()
计算机何时以不同的方式睡眠(Chrome 不会暂停它或减慢它的速度吗?),但这仍然是一个奇怪的错误。
可能是我打电话的方式failed
还是jQuery的$.ajax()
做事方式?