Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 05.11.2018, 20:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Нельзя в асинхронном запросе перенапрваить клиента сервером, об этом сказано выше. А "наверное" или подобные предположения не дают понимания происходящего у вас на странице.
Ответить с цитированием
  #12 (permalink)  
Старый 05.11.2018, 23:34
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

Если не надоел, то вот как происходит:
нажатия ссылки add_to_cart&id=420 происходит переходна страницу add_to_cart. В SWITCH :

switch($page){ 
case('add_to_cart'):        
    $id = $_GET['id'];    
    $add_item = add_to_cart($id);
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');  
    break;
}

вызывается сначала функция php add_to_cart($id);
function add_to_cart($id){
    $id = $_GET['id'];
    if(isset($_SESSION['cart'][$id])){
        $_SESSION['cart'][$id]++;
        return true;
        } else{
            $_SESSION['cart'][$id] = 1;
            return true;
            }
     return false;
    }


потом цена и колличество заносится в сессию и присваиваются в фунцию total_items($_SESSION['cart']); и total_price($_SESSION['cart']); в $.ajax :

<script>
 $('document').ready(function(){
	
 function addtoCart(itemId){
     console.log("js-addToCart()");
     $.ajax({
         type: 'POST',
         async: false,
         url:"../send/"+itemId+'/',
         dataType: 'json',
         succes: function(data){
             if(data['success']){
              $('#cartCntItems')  .html(data['cntItems']);
              $('#addCart_'+ itemId).hide();
              $('#removeCart_'+ itemId).show();
                 }
             }
         
         });
     }   

  
});
</script>


И обработав все эти функции SWITH должен произвести header('Location: /index.php?page=cart');
... но.... SWITH это ж не асинхронный запрос.. или асинхронный?

Последний раз редактировалось Zhenyaxxxx, 05.11.2018 в 23:37.
Ответить с цитированием
  #13 (permalink)  
Старый 06.11.2018, 03:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если судить по именам, то асинхронный запрос как раз и добавляет товар:

$('#addCart_'+ itemId).hide(); - скрыть кнопку добавления товара
$('#removeCart_'+ itemId).show(); - показать кнопку удаления товара

где itemId, это ID товара. То что асинхронно добавляется товар можно понять и без кода - не перегружается страница. И в этом случае нельзя посредством передачи заголовка сервером "после выбора товара должна идти переадресация на страницу cart." Почему и что нужно делать говорилось уже.

Если вы не можете определить где или в чем ошибка и "сломалось" не там, асинхронный запрос не имеет отношения к тому, чего вы хотите, то в этом случае могут быть только две причины не работы:

1) header(), это передача заголовка, а заголовки передаются в начале, затем содержание, то есть до передачи заголовка не должно быть никакого вывода в браузер, а у вас он есть.

2) после передачи заголовка нужно делать выход exit, дабы исключить последующую после него работу кода, а у вас этого нет.

Вам уже говорили проконтролировать ответ в отладчике, вы смотрели?

Последний раз редактировалось laimas, 06.11.2018 в 03:41.
Ответить с цитированием
  #14 (permalink)  
Старый 06.11.2018, 09:18
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

пытался смотреть в отладчике... но не разобрался пока как увидеть ответ...
куда мне вставлять window.location.href = url?page=cart;... ? везде пробовал ничего не происходит.... Спасибо за ваше внимание....

Последний раз редактировалось Zhenyaxxxx, 06.11.2018 в 10:04.
Ответить с цитированием
  #15 (permalink)  
Старый 06.11.2018, 09:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Не читал всю тему, поэтому не знаю писали ли вам это, но...
Вы отправляете запрос на сервер с помощью скрипта, поэтому нет никакого смысла отправлять в ответе заголовки location, если скрипт их не обрабатывает.
Хотите чтобы редирект осуществлялся - после завершения запроса проверяйте заголовки на наличие location и перенаправляйте пользователя.
Ответить с цитированием
  #16 (permalink)  
Старый 06.11.2018, 10:28
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

сейчас еще раз повычитываю, как проверять заголовки....
Ответить с цитированием
  #17 (permalink)  
Старый 06.11.2018, 10:34
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

См. аргументы опции success: http://api.jquery.com/jquery.ajax/
http://api.jquery.com/jQuery.ajax/#jqXHR
Ответить с цитированием
  #18 (permalink)  
Старый 06.11.2018, 10:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Zhenyaxxxx
пытался смотреть в отладчике... но не разобрался пока как увидеть ответ...
На примере отладчика FF. Вкладка Сеть (хотя можно и в консоль выводить запросы), и предполагая, что вы исследуете асинхронные запросы, то выбрать только их отображение (кнопка XHR). Добавляем товар в корзину. В отладчике отобразиться асинхронный запрос, щелчок по которому откроет панель справа где можно просмотреть всю информацию о запросе. В этой панели во вкладке Ответ будет то, чем ответил сервер.

Теперь о куда мне вставлять window.location.href = url?page=cart;, но небольшое отступление. По уму корзина имеет два представления, краткое и полное. Добавили товар, в кратком отобразится количество набранных товаров и их общая сумма. Эта корзина всегда на виду. Полное отображение, это редактирование корзины, оформление заказа и т.п. Не слишком ли "матерно" перебрасывать пользователя в корзину при каждом добавлении товара если ему в этом нет необходимости, он может не один товар собрался прикупить?

Ладно, пусть Ajax и несмотря на "матерность" процесса вы гоните пользователя в корзину. Но в этом случае уже добавление товара посредством Ajaх лишено всякого смысла, так как выгода его применения нивелируется. А уж тем более нет смысла после ответа сервера выполнять это:
if(data['success']){
              $('#cartCntItems')  .html(data['cntItems']);
              $('#addCart_'+ itemId).hide();
              $('#removeCart_'+ itemId).show();
                 }
             }

вместо этого и нужно вставлять window.location.href = url?page=cart;
Ответить с цитированием
  #19 (permalink)  
Старый 06.11.2018, 10:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Nexus, это просто лишнее в данном случае, параметры запроса постоянны, нового сервер ничего не сообщает, ковыряться в заголовках смысла нет. А вот если так как я написал выше, то убрать тип json из запроса.
Ответить с цитированием
  #20 (permalink)  
Старый 06.11.2018, 11:02
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от laimas
ковыряться в заголовках смысла нет
Все "ковыряние" в 2 строки вмещается

Сообщение от laimas
А вот если так как я написал выше, то убрать тип json из запроса.
Не понял о чем вы, можете написать номер комментария или сразу цитату упоминаемого текста?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему перебор элементов не работает по кругу Sinevik Общие вопросы Javascript 4 27.12.2017 01:41
Почему Jquery не работает в arcticmodal при вызове окна с большой высотой? sergey24 Общие вопросы Javascript 5 21.09.2017 15:49
Почему не работает? Rora Общие вопросы Javascript 7 10.05.2017 10:09
cookie почему не работает скрипт Alven Общие вопросы Javascript 1 01.09.2013 03:17
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41