Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Веб-программирование > DHTML, JavaScript, VBScript
Перезагрузить страницу Определение select через ajax
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Gock Gock вне форума
Member
 
Сообщений: 306
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Регистрация: 28.04.2006
По умолчанию Определение select через ajax - 19.06.2013, 18:43

На странице товара интернет-магазина выводится нормальная цена товара, цена со скидкой, а также списки <select> для выбора ширины и высота матраса.

Также есть mysql таблица, в которой содержатся отношения [id товара] - [ширина] - [высота] - [цена] - [цена со скидкой]

При первоначальной загрузке страницы в select ширины попадает минимальное значение ширины из таблицы для данного товара. Чтобы сформировать список select высот товара, из таблицы выбираются все высоты для данного id товара и выбранной (в данном случае минимальной) ширины товара.

Соответственно, в поля цены и цены со скидкой выводятся цифры, соответствующие выбранным в данный момент в списках select ширины и высоты

Затем интереснее:

при изменении ширины меняется select высот - он заполняется новыми "ширинами" для выбранной высоты. Это работает

Далее на основании вновь измененной ширины и высоты должны выводится новые цены. Так вот тут не работает. Происходит такая вещь:

при выборке цены используется не новая ширина, а ровно предыдущая. То есть js-код width_matras = document.getElementById('matras_width_select').val ue обновляет переменную ровно при следующем перевыборе списка ширины.

Кто знает, почему ровно предыдущая? почему js не может сразу определить значения select-списка, только что замененного через ajax?

Привожу код:

select'ы ширины и высоты на странице товара

PHP Код:
<select id="matras_width_select" name="matras_width_select" onchange="ch_gabarity(); ch_cena_of_gabarity();">
                <?php
        $tovar_gabarity_query = "SELECT tovar_shir FROM tovar_size WHERE tovar_id = '{$data['data_id']}' GROUP BY tovar_shir";
        $tovar_gabarity_result = mysql_query($tovar_gabarity_query);
       
        if (!mysql_num_rows($tovar_gabarity_result) or $tovar_gabarity_result == false) {
        } else {
       
            while ($tovar_gabarity_data = mysql_fetch_assoc($tovar_gabarity_result)) {
           
                echo '<option value="'.$tovar_gabarity_data['tovar_shir'].'">'.$tovar_gabarity_data['tovar_shir'].'</option>';
           
            }
       
        }
        ?>
</select>
<select id="matras_height_select" name="matras_height_select" onchange="ch_cena_of_gabarity();">
                <?php
        $tovar_gabarity_query = "SELECT tovar_visota FROM tovar_size WHERE tovar_id = '{$data['data_id']}' GROUP BY tovar_visota";
        $tovar_gabarity_result = mysql_query($tovar_gabarity_query);
       
        if (!mysql_num_rows($tovar_gabarity_result) or $tovar_gabarity_result == false) {
        } else {
       
            while ($tovar_gabarity_data = mysql_fetch_assoc($tovar_gabarity_result)) {
           
                echo '<option>'.$tovar_gabarity_data['tovar_visota'].'</option>';
           
            }
       
        }
        ?>
        </select>

Сам ajax находится в конце <head>

JS Код:
function ch_gabarity() {
    //получаем id товара
    var item_id = document.getElementById('item_id').value;
   
    //получаем выбранную ширину
    var width_matras = document.getElementById('matras_width_select').value;
   
    //ограничиваем список "высота" в зависимости от списка "ширина"
    abc_query = new XMLHttpRequest();
    abc_query.onreadystatechange = function() {
        if (abc_query.readyState == 4 && abc_query.status == 200) {
            document.getElementById('matras_height_select').innerHTML = abc_query.responseText;
           
            }
    }
    abc_query.open("GET", "http://<?php echo $parameters['project_url']; ?>/system/ajax_action.php?tovar_id=" +item_id+ "&shirina=" +width_matras+ "&ch_select=1", true);
    abc_query.send();
}
function ch_cena_of_gabarity() {
    //получаем id товара
    var item_id = document.getElementById('item_id').value;
   
    //получаем выбранную ширину
    var width_matras = document.getElementById('matras_width_select').value;
   
    //получаем выбранную высоту
   
    var height_matras = document.getElementById('matras_height_select').value;
   
    //меняем цену и цену со скидкой товара в зависимости от выбранной ширины или высоты
    xhttp=new XMLHttpRequest();    
    xhttp.onreadystatechange=function() {    
        if (xhttp.readyState==4 && xhttp.status==200)
            document.getElementById('cena').innerHTML=xhttp.responseText;    
    }    
    xhttp.open("GET", "http://<?php echo $parameters['project_url']; ?>/system/ajax_action.php?tovar_id=" +item_id+ "&shirina=" +width_matras+ "&visota=" +height_matras+ "&ch_cena=1", true);    
    xhttp.send();
   
}

И php-код, исполняющий ajax-запрос

PHP Код:
///меняем высоту в зависимости от ширины
if ($_GET['ch_select'] == 1) {
    $select_aviable_visota_query = "SELECT * FROM tovar_size WHERE tovar_id = {$_GET['tovar_id']} AND tovar_shir = '{$_GET['shirina']}';";
    $select_aviable_visota_result = mysql_query($select_aviable_visota_query);
   
    while ($select_aviable_visota_data = mysql_fetch_assoc($select_aviable_visota_result)) {
   
        $select_option .= '<option>'.$select_aviable_visota_data['tovar_visota'].'</option>';
   
    }
   
    echo $select_option;
}
//меняем цену и цену со скидкой в зависимости от ширины и высоты
if ($_GET['ch_cena'] == 1) {
   
    $tovar_size_query = "SELECT * FROM tovar_size WHERE tovar_id = '{$_GET['tovar_id']}' AND tovar_shir = '{$_GET['shirina']}' AND tovar_visota = '{$_GET['visota']}';";
    $tovar_size_result = mysql_query($tovar_size_query);
   
    if(!mysql_num_rows($tovar_size_result) or $tovar_size_result == FALSE) {
    } else $tovar_size_data = mysql_fetch_assoc($tovar_size_result);
           
        $abc = '<div style="float:left; margin:-3px 15px 0 0;"><h3>Цена</h3></div>
            <div style="text-align:center; margin:10px 10px 0 0;color:#abb8c2; font-size:12px; text-decoration:line-through; float:left; ">от '
.ru_number($tovar_size_data['tovar_old_cena']).' руб</div>
            <span id="cena_matrasa">'
.ru_number($tovar_size_data['tovar_cena']).' руб.</span>
            <div class="null"></div>'
;
           
    echo $_GET['visota'];
}
Миниатюры
matrasi_forum.jpg   matrasi_tablice.jpg  
Ответить с цитированием
  (#2 (permalink)) Старый
Gock Gock вне форума
Member
 
Сообщений: 306
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Регистрация: 28.04.2006
По умолчанию 01.07.2013, 16:44

добавил в select пункт "выбрать высоту", что создало необходимость так или иначе выбирать какой либо его пункт. Теперь все ок
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определение условия при котором линия не будет проходить через область JOKER1 Задания за деньги 2 06.11.2012 21:11
AJAX и MOZILA 1.5 maksi DHTML, JavaScript, VBScript 0 18.10.2012 21:06
Ajax страница Zmei DHTML, JavaScript, VBScript 1 28.08.2012 15:25
Ajax Хеши и Сео rotmaister DHTML, JavaScript, VBScript 1 15.05.2012 00:28
JQuery ajax php gunsoy DHTML, JavaScript, VBScript 0 11.10.2011 18:23
AJAX Хочу быть программистом Задания за деньги 1 06.05.2008 10:19
AJAX & IE7 Алексеев Николай PHP 10 21.08.2007 13:04
AJAX...... Алексеев Николай PHP 3 22.03.2007 16:03
Определение существования записи без SELECT Monah IRH PHP 3 09.03.2007 18:36
PHP & XML & AJAX Алексеев Николай PHP 13 13.01.2007 19:57
Когда столбец проходит через select, select перекрывает этот столбец как исправить PriesT DHTML, JavaScript, VBScript 1 14.09.2005 16:43
Определение IP сервера через RAS Trapper Visual C++ 1 03.02.2004 16:49



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов