HTTP-запрос Axios не запускается только на macOS/iOS

У меня есть веб-приложение, которое вызывает API. Я использую библиотеку Axios для http-запросов. Приложение делает 3 разных вызова Axios (1 для получения книг, 1 для описания книги, 1 для изображения книги). Книги создаются и отображаются при вызовах Axios, а затем, когда пользователь щелкает любую из этих книг, описание книги извлекается и отображается на экране. Это прекрасно работает во всех браузерах, кроме Safari. В Safari вызовы книг и изображений выполняются и обрабатываются отлично, но вызов описания никогда не срабатывает (это ЕДИНСТВЕННЫЙ, который не работает). Я проверил на эмуляторе Safari, и на консоли никаких ошибок не появляется, код не ломается, но на вкладке сети вы можете видеть, что вызов Axios вообще не выполняется, когда вы нажимаете на книгу.


/////  FETCH BOOK DESCRIPTION     /////
// book.title will be used to match book.key of current active books to the one selected by the user
// active books are those displayed on the screen among which the user will choose to click on 

// the function is triggered onclick of any book. There will always be an activeBook.title === bookTitle since bookTitle had been previously taken from activeBook.title.

function fetchBookDescription() {
  let bookTitle = document.querySelector(
    ".book-selected .book-title"
  ).innerText;

  // use book title to find book and its key to fetch description
  for (let activeBook of activeBooks) {
    if (activeBook.title === bookTitle) {
     
    // I checked and up until here it works, it finds the title match but then it doesn't proceed to make the axios call below.

      axios
        .get(`https://openlibrary.org${activeBook.key}.json`)
        .then((response) => {
          changeHeading();

          let bookDescription = response.data.description;
          
          // some data processing... //

          return bookDescription;
        })
        .then((description) => {
          createBookDescription(description);
        })
        .catch((error) => {
          createBookDescription("Book description not available");
        })
    }
  }
}

Я попытался:

  • чтобы изменить вызов Axios на Async await try catch (я читал в других сообщениях, что Axios иногда не работает на iOS/mac).
  • добавьте event.preventDefault() при щелчке по книге (я также читал, что это могло быть связано с событием щелчка).

Обе попытки работали во всех браузерах (поэтому изменения вносились корректно), кроме Safari.

Я не могу думать ни о чем другом, потому что этот вызов axios работает в других браузерах, и сам Axios также работает в Safari, за исключением этого конкретного вызова.

Мы будем очень признательны за любые советы. Большое спасибо. Ричард.

Вы уверены, что событие запущено и выполнено?

Nikita Chayka 08.12.2022 19:39

Есть ли сообщения об ошибках, может быть, в консоли браузера? Пожалуйста, включите их...

Matt Morgan 08.12.2022 19:45

Этот URL-адрес выглядит странно, но это зависит от того, что такое activeBook.key.

James 08.12.2022 20:01

Должен ли быть / перед ${activeBook.key}? Кроме того, попробуйте использовать .textContent вместо .innerText и добавьте простую регистрацию для целей отладки... console.info("bookTitle", JSON.stringify(bookTitle)), console.info("activeBook", JSON.stringify(activeBook)) и т. д.

Phil 09.12.2022 00:39
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Большое спасибо, что посмотрели его. Я решил это. Mac автоматически помещал возврат каретки (/r) в конец строки внутри переменной bookTitle. Таким образом, логическое соответствие activeBook.title === bookTitle оказалось ложным.

Я исправил это, заменив «/r» на «» регулярным выражением следующим образом:

  let bookTitle = document.querySelector(
".book-selected .book-title").innerText;

bookTitle = bookTitle.replace(/\r)/gm, "");

Еще раз спасибо! Ричард.

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