У меня есть фрагмент Javascript, который мои клиенты размещают на своих сайтах. Чтобы отслеживать клики, я создаю XMLHttpRequest, жду статуса 200 и затем распространяю клик.
Вот соответствующий код для события щелчка:
function pingServer(done) {
var url = "http://www.example.com/api/events/?eventID=" + eventID;
var invocation = new XMLHttpRequest();
invocation.open('GET', url, true);
invocation.withCredentials = true;
invocation.onreadystatechange = function() {
if (invocation.readyState == invocation.LOADING && invocation.status == 200) {
(typeof done === 'function' && done());
}
};
invocation.send();
}
// get the href
var href = e.target.href;
// ping then redirect
pingServer(function () { window.location.href = href; });
Это отлично работает, и я получаю пинг на моем сервере. Проблема заключается в том, что задержка в ожидании кода XMLHttpRequest 200 заметна для конечного пользователя. Вращатель браузера не начинает вращаться до тех пор, пока это не произойдет. Так что для пользователя это плохой UX и похоже, что щелчок ничего не сделал.
Существует ли более удобный для пользователя способ регистрации события щелчка при одновременной немедленной обработке перенаправления ссылки?