Работает везеде с влюченным кешом AJAX - JavaScript jason xhr XMLHttpRequest, кроме iPhone Есть решение
Здравствуйте. Может кто-то сталкивался и сразу может что-то быстро подсказать?
Суть.
AJAX работает везде с включенным кешом, кроме iPhone браузеров.
На сайте данные корзины обновляются отлично во всех браузера, за исключением Айфона, что не так куда смотреть, может кто-то сталкивался и сразу знает ответ? Причем ошибок в браузере савафри на макбуке нет и там работает все исправно, конечный вариант написанный на JavaScript.
Вот сам код.
var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://fvsport.com/minicart/total'); xhr.setRequestHeader('Cache-Control', 'no-cache'); xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return; } if (xhr.status == 200) { var result = JSON.parse(xhr.responseText); if (result.data.total_count >= 1) { document.getElementsByClassName("basket-count")[0].innerText = document.getElementsByClassName("basket-count")[1].innerText = result.data.total_count; document.getElementsByClassName("cart-total")[0].innerText = document.getElementsByClassName("cart-total")[1].innerText = result.data.total_raw + ' р'; document.getElementsByClassName("is-active")[0].style.display = document.getElementsByClassName("is-active")[1].style.display = 'block'; document.getElementsByClassName("is-active")[0].style.opacity = document.getElementsByClassName("is-active")[1].style.opacity = '1'; } else { document.getElementsByClassName("is-active")[0].style.display = document.getElementsByClassName("is-active")[1].style.display = 'none'; document.getElementsByClassName("is-active")[0].style.opacity = document.getElementsByClassName("is-active")[1].style.opacity = '0'; } } else { console.log("The JSON Data was't comeing from cart!"); } } xhr.send();
Пока нашел только такую штуку(https://software.intel.com/en-us/forums/intel-xdk/topic/594542), но попробовать пока не успел, решил написать сюда, может кто-то знает более простой способ, возможно fetch или что-то еще.
Мозила говорит, что действительно бывают проблемы на iOS - https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/response
Только проблема во всех браузерах на Айфонах, а не тольк на Сафари, поэтому верхний пост с root директорией похож на правду.
Всем спасибо за внимание.
5 ответов
P.S. Видимо fetch не поддерживает на айфонах header заголовки под кэш. Печально, а мне нужна на стороне клиента именно опция настройки кеша.
https://developer.mozilla.org/...
Тему можно закрыть.
Я разную херню встречал, но такого глюка и подставы еще поискать надо, огромную тучу времени убил, даже fetch зацепить пришлось. На яблочных и Сафари проблема решается так, нужно сделать два запроса, один POST другой GET, еще и с задержкой и тогда все глюки уходят, даже на телефонах. Ну не умеют Apple, нормально поддерживать кеш на уровне разработчиков, к такому выводу я пришел ...
Pragma: no-cache
Cache-control: no-cache; must-revalidate
Или
Pragma: no-cache
Cache-control: no-store
Спасибо большое, попробуем и такой вариант.
Да, данный способ работает, проверено в консоли Safari последняя версия. Спасибо.
Решил объединить два способа, чтобы наверняка и железно на все браузеры.
Цитирую, может кому-то пригодится:
и второй вариант:
http.setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");