Как дождаться завершения вызова ajax с помощью window.onunload и vue.js - PullRequest
0 голосов
/ 12 декабря 2018

Когда пользователь покидает текущую страницу конфигурации / композиции, я хотел бы отправить запрос на публикацию в свой бэкэнд (Django).

Для этого я использую window.onbeforeunload и window.onunload.

Ниже приведен следующий код (с использованием vue.js):

updated: function () {

    var csrftoken = document.querySelector('input[name="csrfmiddlewaretoken"]').getAttribute("value");

    var items_composed_cart_length = this.items_composed_cart.length;

    var next = window.location.href;
    var sous_categories_articles = Number(next.slice(-1));

    window.onbeforeunload = function (e) {
        if (items_composed_cart_length !== 0)
            return "Si vous quittez ou rechargez la page, votre composition ne sera pas sauvegardée.";
    };

    window.onunload = e => {
        this.$http.post('http://127.0.0.1:8000/commander/remove-composed-cart/' + sous_categories_articles + '/', { next: next });
        $.ajax({
            type: 'POST',
            async: false,
            url: 'http://127.0.0.1:8000/commander/remove-composed-cart/' + sous_categories_articles + '/',
            data: { 'csrfmiddlewaretoken': csrftoken, 'next': next },

        });
        localStorage.removeItem('items_composed_cart');
        localStorage.removeItem('groupedByTypologieItem');
    };
},

Я хотел бы сделать синхронный запрос.Что было бы лучшим вариантом, поскольку async: false устарела?

Я пытался использовать Navigator.sendBeacon (), но не могу передать бэкэнду токен CSRF (ошибка 403).Я также пробовал vue-resource, но я так и не понял, как создать синхронный почтовый запрос ...

Заранее спасибо за помощь.

Singertwist

...