Этот метод достаточно надежен, если ваш сервер достаточно быстр для ответа. Что-то, чтобы действительно остерегаться, хотя. Если вы закроете браузер и отправите AJAX-запрос о событии unload, очень велика вероятность того, что ответ не будет возвращен с сервера вовремя, пока объект окна не будет уничтожен. Что происходит в этом случае (по крайней мере, с IE), так это то, что он потеряет связь с вашим объектом соединения и не завершит его корректно, пока не истечет время ожидания соединения. Если на вашем сервере не включена поддержка активности соединения, после закрытия 2 окон (хотя еще одно окно остается открытым) у вас закончатся открытые соединения с сервером (для IE6-7, для IE8 - 6 окон) и вы не сможете открыть свой веб-сайт, пока не истечет время ожидания подключения.
Я сталкивался с такой ситуацией, прежде чем открывал всплывающее окно, которое отправляло запрос AJAX на выгрузку, оно было очень надежным, но оно страдало из-за описанного выше, и это заняло очень много времени чтобы отследить это и понять, что происходит. После того, что я сделал, я убедился, что открывающееся окно будет иметь тот же код для вызова сервера, и при каждой выгрузке проверял на открыватель и запускал код там, если он присутствовал.
Похоже, что если вы закроете самое последнее окно браузера, IE должным образом разрушит соединение, но если откроется еще одно окно, оно не будет.
P.S. И просто чтобы прокомментировать ответ выше, AJAX на самом деле не асинхронный. По крайней мере, реализация JS этого не делает. После отправки запроса ваш код JS все еще будет ожидать ответа от сервера. Он не будет блокировать выполнение вашего кода, но поскольку для ответа серверу может потребоваться некоторое время (или достаточно долго, чтобы Windows прекратила работу с оконным объектом IE), вы можете и, вероятно, столкнетесь с проблемой, описанной выше.