Mac OS X 10.8.4、Chrome 27 (最新の安定版) を使用。
サーバーへの接続がまだ存在するかどうかを確認するために、X 秒ごとに (を使用してsetInterval()
) jQuery を使用して AJAX 呼び出しを行うスクリプトがあります (ハートビート)。いくつかのデータを投稿し、成功したかどうかに応じて、他の関数を呼び出します。
Mac がスリープ状態 (画面が黒くなる、HDD の電源が切れるなど) になるまで正常に動作し、起動すると 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()
でしょうか?