Запрос сценария Jquery Ajax по-прежнему загружается даже после прерывания вызова (статус ожидания)

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

Запрос сценария Jquery Ajax по-прежнему загружается даже после прерывания вызова (статус ожидания)

Файл сценария, который я пытался загрузить, представляет собой API карт Google из Китая. Если запрос не выполняется, я загружаю китайскую версию API, и она работает нормально, но для остановки загрузки страницы и отображения приведенного ниже сообщения требуется более одной минуты.

jquery.min.js:2 GET https://maps.googleapis.com/maps/api/js?key="--mykey---"&libraries=places&_=1553093568934 net::ERR_TIMED_OUT

Мой код для загрузки и прерывания ниже

var xhr = $.ajax({
    url: "https://maps.googleapis.com/maps/api/js?key=keyyy&libraries=places",
    dataType: "script",
    timeout: 5000
  }).done(function() {
    //do stuff
    console.info("loaded");
  })
  .fail(function() {
    //do stuff
    console.info("fail");
    xhr.abort();
    $.ajax({
      url: "https://maps.google.cn/maps/api/js?key=keyy&libraries=places",
      dataType: "script",
      timeout: 5000
    }).done(function() {
      //do stuff
      console.info("loaded");

    })

  });

Я также пробовал это

        var xhr = $.ajax({
            url: "https://maps.googleapis.com/maps/api/js?key=key&libraries=places",
            dataType: "script",
            timeout: 5000,
            success:function(){

            },
            error:function(a,b,c){
                //do stuff
                console.info("fail");
                console.info(a,b,c);
                console.info(xhr.state());
                xhr.abort();
                console.info(xhr.state());
                $.ajax({
                    url: "https://maps.google.cn/maps/api/js?key=key&libraries=places",
                    dataType: "script",
                    timeout: 5000,
                    success:function(){
                        console.info("loaded chinese")
                    },
                    error:function(a,b,c){

                    }
                })
            }
        })

Можете ли вы предоставить свой код, где вы пытаетесь прервать запрос?

Nicolay 20.03.2019 16:16

@Nicolay Добавлен код в вопрос

suhail c 20.03.2019 16:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
122
1

Ответы 1

Согласно вашему коду, ваше прерывание не будет выполнено до тех пор, пока запрос не завершится ошибкой или не истечет время ожидания после 5000 мс, но вам нужен обработчик ошибок, чтобы поймать тайм-аут.

Проверьте этот пост, чтобы узнать, как обрабатывать свойство тайм-аута: Установить время ожидания для ajax (jQuery)

Проверьте этот пост для получения дополнительной информации об отмене запроса: Прервать запросы Ajax с помощью jQuery

Я добавил тайм-аут для первого вызова, и через 5 секунд вызывается второй вызов ajax, но первый вызов все еще находится в состоянии ожидания. Функция отказа для первого вызова — это обработчик ошибок, внутри которого я прерываю запрос.

suhail c 20.03.2019 16:54

Я попробовал ваш код, и он никогда не попадает в обработчик сбоев, вам может потребоваться попытаться поймать его в обработчике готовности.

Nicolay 20.03.2019 17:03

Чтобы получить ошибку, вам нужно попробовать это с виртуальной машины, расположенной в Китае.

suhail c 20.03.2019 17:04

Другие вопросы по теме