Во-первых, вы можете перехватить обработку ошибок при вызове ajax.Если это не удается, вы должны в конечном итоге вернуть условие ошибки.Поскольку я нигде не видел этого определения, вам, вероятно, придется найти способ проверить, как реагируют все разные браузеры, когда соединение теряется по-разному, чтобы понять, можно ли это использовать исключительно.В любом случае, не повредит перехватить ответ Ajax.Вы, вероятно, также захотите внедрить свой собственный тайм-аут, чтобы, если вы не получили ответ от сервера во время хх, возникла какая-то проблема.
Секунда, если вы хотите получить более быструю обратную связь иболее вероятно, что он будет согласованным даже в разных браузерах, тогда ваш сервер сможет вернуть сердцебиение.Таким образом, каждые XX секунд бездействия ваш сервер будет возвращать ответ сердцебиения.Клиент будет ждать, xx + yy секунд (yy - это дополнительное время, чтобы учесть время приема-передачи и небольшое отставание в ответе сервера), и если он не получит ни фактическую дейтаграмму от сервера, ни ответный сигнал, то онпредположил бы, что связь умерла.Если он получает сердцебиение, он просто делает еще один запрос.Вы можете установить сердцебиение на любой желаемый интервал, хотя очевидно, что короткие промежутки времени более обременительны для серверной инфраструктуры.
К вашему сведению, jQuery имеет глобальный обработчик ошибок ajax, описанный здесь: http://api.jquery.com/ajaxError#callback и jQueryСам вызов ajax позволяет указать время ожидания и обработчик ошибок.
В псевдокоде:
$.ajax({
url: 'xxxx',
success: function(data, textStatus, jqXHR) {
if (data is heartbeat) start a new ajax connection to ask again
if (data has returned data in it) process it
};
error: function(jqXHR, textStatus, errorThrown) {
some sort of connection error has happened
};
timeout: 2 * 60 * 1000; // 2 minutes
});