Лучшие практики для закрытия окна браузера без ожидания ответа ajax - PullRequest
1 голос
/ 23 января 2020

Я хочу открыть окно, сделать ajax вызов и закрыть окно. Я хочу сделать это как можно быстрее, и мне было интересно, нужно ли мне ждать ответа ajax, прежде чем закрывать окно?

В настоящее время я делаю это так:

        $.ajax({
            url: requestURL,
            type: 'GET',
            dataType: "json",
            cache: false,
            timeout: 30000,
            always: function () {
                closeWindow();
            }
        });

Однако мне было интересно, достигнет ли ajax сервер на 100% во всех браузерах, если я сделаю это так:

        $.ajax({
            url: requestURL,
            type: 'GET',
            dataType: "json",
            cache: false,
            timeout: 30000,
            always: function () {

            }
        });
        closeWindow();

//THIS HAS CONFIRMED TO NOT WORK AND MISS OUT SOME REQUESTS

closeWindow() Реализация не имеет значения.

Полный вариант использования выглядит следующим образом:

  1. Я отправляю пользователю ссылку на Whatsapp / Telegram / Messenger
  2. Пользователь нажимает ссылку
  3. Браузер открыт - > выполните ajax вызов -> закрыв окно.

РЕДАКТИРОВАТЬ Чтобы уточнить, мне все равно, каким был ответ сервера на вызов. Я просто хочу убедиться, что браузер выдал HTTP GET серверу, а затем закрыть окно.

EDIT 2 AJAX также не является обязательным, лучше использовать vanilla JS

Ответы [ 5 ]

0 голосов
/ 23 января 2020

Полагаю, ответ был у меня в голове: используйте объект Image для отправки запроса и закройте окно сразу после:

        var img = new Image();
        img.src =  urlWithParamters;
        img.onload = function () {
            closeWindow();
        };
        img.onerror = function () {
            closeWindow();
        };

//safety:
        setTimeout(closeWindow,5000);
0 голосов
/ 23 января 2020

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

$(document).ajaxStart(function() {
   console.log('Ajax call started');
   closeWindow();
});

Или вы можете попробовать некоторые необработанные js как объяснено решение здесь .

0 голосов
/ 23 января 2020

Вы можете сделать это, как вы сказали, отправить запрос ajax и закрыть окно, так как это асинхронные c методы, он сделает вызов, если вы хотите быть абсолютно УВЕРЕННЫМИ, напишите небольшой PHP скрипт который записывает что-то в файл с небольшим сном вверху, чтобы проверить, что он сделал вызов, но он сделает это.

Редактировать: или использовать этот метод и закрыть браузер в готовая функция, это займет 1 мс или около того

0 голосов
/ 23 января 2020

следующая функция может закрыть вашу вкладку через 1 сек c, не дожидаясь ответа ajax

    $.ajax({
        url: requestURL,
        type: 'GET',
        dataType: "json",
        cache: false,
    });
    setInterval(function(){ 
        close();
    }, 1000);
0 голосов
/ 23 января 2020

Поскольку вы используете JQuery, вы можете использовать опцию обратного вызова «done» и установить свою функцию внутри, чтобы окно закрывалось, если запрос был успешным.

$.ajax({
   url: requestURL,
   type: 'GET',
   dataType: "json",
   cache: false
}).done(function() {
   closeWindow();
});

Вы также можете использовать опция обратного вызова «fail» для управления потенциальными ошибками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...