Нельзя в асинхронном запросе перенапрваить клиента сервером, об этом сказано выше. А "наверное" или подобные предположения не дают понимания происходящего у вас на странице.
|
Если не надоел, то вот как происходит:
нажатия ссылки 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 это ж не асинхронный запрос.. или асинхронный? |
Если судить по именам, то асинхронный запрос как раз и добавляет товар:
$('#addCart_'+ itemId).hide(); - скрыть кнопку добавления товара $('#removeCart_'+ itemId).show(); - показать кнопку удаления товара где itemId, это ID товара. То что асинхронно добавляется товар можно понять и без кода - не перегружается страница. И в этом случае нельзя посредством передачи заголовка сервером "после выбора товара должна идти переадресация на страницу cart." Почему и что нужно делать говорилось уже. Если вы не можете определить где или в чем ошибка и "сломалось" не там, асинхронный запрос не имеет отношения к тому, чего вы хотите, то в этом случае могут быть только две причины не работы: 1) header(), это передача заголовка, а заголовки передаются в начале, затем содержание, то есть до передачи заголовка не должно быть никакого вывода в браузер, а у вас он есть. 2) после передачи заголовка нужно делать выход exit, дабы исключить последующую после него работу кода, а у вас этого нет. Вам уже говорили проконтролировать ответ в отладчике, вы смотрели? |
пытался смотреть в отладчике... но не разобрался пока как увидеть ответ...
куда мне вставлять window.location.href = url?page=cart;... ? везде пробовал ничего не происходит.... Спасибо за ваше внимание.... |
Не читал всю тему, поэтому не знаю писали ли вам это, но...
Вы отправляете запрос на сервер с помощью скрипта, поэтому нет никакого смысла отправлять в ответе заголовки location, если скрипт их не обрабатывает. Хотите чтобы редирект осуществлялся - после завершения запроса проверяйте заголовки на наличие location и перенаправляйте пользователя. |
сейчас еще раз повычитываю, как проверять заголовки....
|
См. аргументы опции success: http://api.jquery.com/jquery.ajax/
http://api.jquery.com/jQuery.ajax/#jqXHR |
Цитата:
Теперь о куда мне вставлять 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; |
Nexus, это просто лишнее в данном случае, параметры запроса постоянны, нового сервер ничего не сообщает, ковыряться в заголовках смысла нет. А вот если так как я написал выше, то убрать тип json из запроса.
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 18:49. |