У меня есть веб-приложение, которое вызывает 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");
})
}
}
}
Я попытался:
Обе попытки работали во всех браузерах (поэтому изменения вносились корректно), кроме Safari.
Я не могу думать ни о чем другом, потому что этот вызов axios работает в других браузерах, и сам Axios также работает в Safari, за исключением этого конкретного вызова.
Мы будем очень признательны за любые советы. Большое спасибо. Ричард.
Есть ли сообщения об ошибках, может быть, в консоли браузера? Пожалуйста, включите их...
Этот URL-адрес выглядит странно, но это зависит от того, что такое activeBook.key.
Должен ли быть / перед ${activeBook.key}? Кроме того, попробуйте использовать .textContent вместо .innerText и добавьте простую регистрацию для целей отладки... console.info("bookTitle", JSON.stringify(bookTitle)), console.info("activeBook", JSON.stringify(activeBook)) и т. д.



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


Большое спасибо, что посмотрели его. Я решил это. Mac автоматически помещал возврат каретки (/r) в конец строки внутри переменной bookTitle. Таким образом, логическое соответствие activeBook.title === bookTitle оказалось ложным.
Я исправил это, заменив «/r» на «» регулярным выражением следующим образом:
let bookTitle = document.querySelector(
".book-selected .book-title").innerText;
bookTitle = bookTitle.replace(/\r)/gm, "");
Еще раз спасибо! Ричард.
Вы уверены, что событие запущено и выполнено?