В Firefox ajax-вызов удаляется перед перенаправлением - PullRequest
0 голосов
/ 14 февраля 2019

Во-первых, в Chrome это работает каждый раз на 100%, а в Firefox не работает на 100%.

В событии щелчка я хочу только передавать данные с ajax на сервер для статистики.Ответ не требуется, он должен только отправлять данные на сервер.После отправки ajax-данных посетитель должен немедленно перенаправить на другую страницу. Я не могу выполнить перенаправление после обратного вызова ajax или чего-то вроде async = false, потому что расчет занимает время и посетители не должны ждать секунд.

Единственное решение, которое я вижу, этоиспользовать setTimeout () в качестве обходного пути для Firefox, чтобы вызов ajax был успешно отправлен и вызван перенаправлением через миллисекунды.Есть ли предпочтительное задокументированное значение в миллисекундах для этой задачи?Так что он работает на 100% для всех будущих версий Firefox.

Фактически, я могу только догадываться, какое значение работает на моем компьютере в моей настоящей версии Firefox.Есть ли официальное значение для этого в Firefox?

Может ли это быть проблемой в Firefox?Я полностью понимаю, что async = true не дает обратных вызовов с внешними перенаправлениями.

Но мне не нужны обратные вызовы, я хочу только отправлять данные с помощью ajax.Почему Firefox молча убивает эти запросы?В сети нет никаких следов.

1 Ответ

0 голосов
/ 14 февраля 2019

Спасибо Jaromanda за этот полезный совет с sendBeacon.https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

var fd = new FormData(); 
fd.append('var1', 123); 
fd.append('var2', 'text'); 
navigator.sendBeacon('ajax.php', fd);

В PHP вы можете получить доступ к серверу с помощью

$_POST['var1']

Подсказка: с перенаправлением после sendBeacon (), например,

window.location.href = url;

, как сказано вСостояние вкладки сети "В ОЖИДАНИИ" с передачей 0 байт, и это никогда не изменяется, но запрос был успешно отправлен.Без перенаправления есть HTTP-статус 200, так что это немного странно.

...