Аристотель прав насчет очереди событий.Что вы можете сделать, это вставить свою временную метку в фрагмент кода, который, как вы знаете, будет выполнен как можно ближе к началу запроса AJAX.
Текущая стабильная версия jQuery (на момент написания: 2.2.2) имеет клавишу beforeSend
, которая принимает функцию.Я бы сделал это там.
Обратите внимание, что в JavaScript все глобальные переменные, которые объявлены вне функции , инициализируются сразу после запуска программы.Здесь поможет понимание области действия JavaScript.
Сложная часть - доступ к переменной, которую вы объявили в функции beforeSend
в обратном вызове success
.Если вы объявите его локально (используя let
), вы не сможете легко получить к нему доступ за пределами области действия этой функции.
Вот пример, который даст несколько более точные результаты ( предостережение: в большинстве случаев! ), который также опасен , поскольку он объявляет переменную глобальной области видимости (start_time
), которая может плохо взаимодействовать с другими сценариями на той же странице и т. Д.
Я бы хотелпогрузиться в мир прототипной функции JavaScript bind , но это немного выходит за рамки.Вот альтернативный ответ, используйте с осторожностью и вне производства.
'use strict';
$.ajax({
url: url,
method: 'GET',
beforeSend: function (request, settings) {
start_time = new Date().getTime();
},
success: function (response) {
let request_time = new Date().getTime() - start_time;
console.log(request_time);
},
error: function (jqXHR) {
console.log('ERROR! \n %s', JSON.stringify(jqXHR));
}
]);