Вызов Ax ios в функции beforeunload работает только при обновлении (ReactJS) - PullRequest
0 голосов
/ 26 апреля 2020

Мне нужно сообщить серверу, когда пользователь закрывает или перезагружает страницу. Я слушаю событие «beforeunload», и когда функция вызывается, я отправляю вызов ax ios на сервер. Он работает при обновлении страницы, но не при закрытии, и я не знаю, как это исправить.

Вот мой код

  componentDidMount() {
    window.addEventListener("beforeunload", this.endSession);
  }

  componentWillUnmount() {
    window.removeEventListener("beforeunload", this.endSession);
  }

  endSession = (e) => {
    axios
      .post(Globals.backendServer + "/session/end", {
        sessionData: this.state.sessionData,
      })
      .then((res) => {})
      .catch((err) => {
        alert(err);
      });
  };

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

К сожалению, жизненные циклы unload и beforunload не надежны для запроса Ajax, я предпочитаю обрабатывать это с токеном и обновлять токен sh со стороны сервера. Даже если вы обнаружите закрытую страницу, как вы могли бы определить, какая вкладка или страница закрыта, когда пользователь может открыть несколько вкладок

0 голосов
/ 26 апреля 2020

Нет гарантии, что асинхронные действия, выполненные в событии beforeunload, будут завершены, и ax ios использует асинхронный способ выполнения запросов.

Вы, вероятно, можете использовать старый добрый XHR, чтобы сделать синхронный запрос . Если вы направите go в раздел, помеченный Adapting Sync XHR use cases to the Beacon API, они будут go использовать стратегии сохранения запросов во время выгрузки, поскольку синхронный XHR устарел.

Обратите внимание, что синхронные запросы HTTP, как правило, плохая идея, поскольку они сделает страницу не отвечающей во время их завершения. Я не уверен, что поведение будет для синхронного запроса во время выгрузки.

...