使用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()
如何做到这一点?