Я попытался загрузить скрипт через вызов ajax с тайм-аутом, если вызовы завершаются с ошибкой после тайм-аута, я прерываю вызов, но когда я проверил вкладку сети, я вижу, что статус js все еще находится в ожидании, а также загрузчик страниц все еще загружается .
Файл сценария, который я пытался загрузить, представляет собой 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 Добавлен код в вопрос



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Согласно вашему коду, ваше прерывание не будет выполнено до тех пор, пока запрос не завершится ошибкой или не истечет время ожидания после 5000 мс, но вам нужен обработчик ошибок, чтобы поймать тайм-аут.
Проверьте этот пост, чтобы узнать, как обрабатывать свойство тайм-аута: Установить время ожидания для ajax (jQuery)
Проверьте этот пост для получения дополнительной информации об отмене запроса: Прервать запросы Ajax с помощью jQuery
Я добавил тайм-аут для первого вызова, и через 5 секунд вызывается второй вызов ajax, но первый вызов все еще находится в состоянии ожидания. Функция отказа для первого вызова — это обработчик ошибок, внутри которого я прерываю запрос.
Я попробовал ваш код, и он никогда не попадает в обработчик сбоев, вам может потребоваться попытаться поймать его в обработчике готовности.
Чтобы получить ошибку, вам нужно попробовать это с виртуальной машины, расположенной в Китае.
Можете ли вы предоставить свой код, где вы пытаетесь прервать запрос?