Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2018, 19:35
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

Почему то не работает header('Location:index.php?page=cart');
Здравствуйте всем участникам форума... Редактировал сайт и ... "поломал". корзину сайта, после выбора товара должна идти переадресация на страницу cart.. но почему то не работает, остается на странице add_to_cart..посмотрите может увидете ошибку...
<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>

session_start();
if(!isset($_SESSION['cart']))
{
  $_SESSION['cart'] = array();
  $_SESSION['total_items'] = 0;
  $_SESSION['total_price'] = 0;
    }

$page = empty($_GET['page']) ? 'index.php' : $_GET['page']; /* если страниц нет, то главная */


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');  /*index.php&id='.$id*/
    break; 
case('update_cart'):        
    update_cart();
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');
    break;
}
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2018, 23:48
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

Попробуйте так:
header('Location: /index.php?page=cart');

Если не сработает - смотрите реальные заголовки ответа (в браузере F12 -> вкладка Network).
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2018, 04:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$.ajax(
dataType: 'json'
succes: function(data){
if(data['success']){
$('#cartCntItems') .html(data['cntItems']);
......

и какие в этом случае могут быть header('Location.... ?
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2018, 16:42
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

Вот, забыл показать функции по корзине и стандартный блок с товаром, который выводится из БД (внизу). До сих пор не получилось сделать переадресацию header('Location: /index.php?page=cart'); после нажатия на кнопку купить.... может мне лучше избавится от переключателя SWITCH и как то по другому переделать функции обработки корзины, чтобы функции обработки не зацикливалась на add_to_cart, как на странице.... Помогите советом...


<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>


Функции корзины:

session_start();
if(!isset($_SESSION['cart']))
{
  $_SESSION['cart'] = array();
  $_SESSION['total_items'] = 0;
  $_SESSION['total_price'] = 0;
    }



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;
    }


function db_result_array($result){
   $res_array = array();
   $count = 0;
   while($row = mysql_fetch_array($result)){
       $res_array[$count] = $row;
       $count++;
       } return $res_array;
    }

function get_product($id){
$query = " SELECT *  FROM `product` WHERE `id` = '$id'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
return $row;
}


function update_cart(){
    foreach($_SESSION['cart'] as $id => $qty){
        if($_POST[$id] == '0'){
            unset($_SESSION['cart'][$id]);
            } else { $_SESSION['cart'][$id] = $_POST[$id]; }
        }
    
    }


function total_items($cart){
    $num_items = 0;
    if(is_array($cart)){
        foreach($cart as $id => $qty){
            $num_items = $num_items + $qty;
         }
        }
    return $num_items; 
    }

function total_price($cart){
    $total_price = 0;
    
    if(is_array($cart)){        
        foreach($cart as $id => $qty){
            $query = "SELECT cena FROM product WHERE id = '$id'";
            $result = mysql_query($query);
            if($result){
                $item_price = mysql_result($result, 0, 'cena');
                $total_price = $total_price + $item_price * $qty;
                }
           
         }
        }
    return $total_price; 
    }






$page = empty($_GET['page']) ? 'index.php' : $_GET['page']; /* если страниц нет, то главная */


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');  /*index.php&id='.$id*/
    break; 
case('update_cart'):        
    update_cart();
    $_SESSION['total_items'] = total_items($_SESSION['cart']);
    $_SESSION['total_price'] = total_price($_SESSION['cart']);
    header('Location:index.php?page=cart');
    break;
}


Из базы данных циклом выводятся товары с ценой и кнопкой "купить"
<div >       
       <p>Товар</p>
       <div id = 'price'><?php echo (int)$row['cena'].  " грн. "; ?> </div>  
       
       <a <?php if($row['price'] !=0){ ?> href="?page=add_to_cart&id=<?= $row['id'] ?>"; <?php } ?>id = "to_basket">Купить</a>
</div>




Вот страница сайта, для наглядного примера проблемы.... : https://ensy.com.ua/vents?page=vents

Последний раз редактировалось Zhenyaxxxx, 05.11.2018 в 16:46.
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2018, 18:35
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Zhenyaxxxx
До сих пор не получилось сделать переадресацию header('Location: /index.php?page=cart'); после нажатия на кнопку купить...
И не получится, и функции корзины и прочее к этой проблеме отношения не имеют. Причина в асинхронном запросе клиента, а при нем ответ сервера помещается в некий контейнер, и это есть фоновый запрос на странице, и перенаправление не обязывает браузер делать переход для страницы текущей, просто он запросит данные по указанному в header адресу и ответ также поместит в контейнер. Если при этом ответ не будет JSON, то кроме ошибки вы ничего не получите.

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

подскажите как мне исправить этот асинхронный запрос, на JSON?

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

Сообщение от Zhenyaxxxx
как мне исправить этот асинхронный запрос, на нормальный?
Что значит "нормальный"? Асинхронный (ajax) запрос позволяет обмениваться данными с сервером без перезагрузки страницы.

Вы можете пояснить связь представленного вами кода Ajax запроса с кодом РНР и вашей проблемой? Если этот Ajax запрос есть выбор товара (добавление в корзину), причем клиенту предписано принимать JSON, то сервер и должен отдавать только json. Ну ежику же понятно, что о перенаправлении на другую страницу при этом не может быть и речи. Перейти можно только клиентом, как window.location.href = url?page=cart. Но как тогда быть с $('#cartCntItems') .html(data['cntItems']); и т.д.?

Вы либо что-то не договариваете, либо не можете описать проблему так, чтобы было понятна ее первопричина.
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2018, 19:41
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

Нечего мне недоговаривать.... Раньше все работало.... постепенно редактировал сайт.... и не заметил когда появилась эта проблема.... но скрипты корзины не трогал.... теперь пытаюсь исправить.... Что нужно показать еще чтоб понять что я такого "наворотил"..? Мне этот switch не нравится.... он добавляет мне страницы, которые нужно скрывать от индекса... Скажите где, какой код вытащить, я все покажу....

Последний раз редактировалось Zhenyaxxxx, 05.11.2018 в 19:45.
Ответить с цитированием
  #9 (permalink)  
Старый 05.11.2018, 20:06
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Zhenyaxxxx
Скажите где, какой код вытащить
Не надо никакого кода, достаточно пояснения - что есть ваш $.ajax, это и есть добавления товара в корзину? Если да, то после этого запроса вы и пытаетесь выполнить переход?

Или ... ?
Ответить с цитированием
  #10 (permalink)  
Старый 05.11.2018, 20:27
Кандидат Javascript-наук
Отправить личное сообщение для Zhenyaxxxx Посмотреть профиль Найти все сообщения от Zhenyaxxxx
 
Регистрация: 25.10.2018
Сообщений: 102

Когда нажимаю кнопку "Купить", происходит переход по ссылке add_to_cart&id=...переменная из товара... после этого оно переходит для управления в функцию корзины и в swith:
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;
    }


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;


}


Я так думаю...... и наверное, после этого происходит $.ajax...

Последний раз редактировалось Zhenyaxxxx, 05.11.2018 в 20:29.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему перебор элементов не работает по кругу 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