За последние 24 часа нас посетили 53804 программиста и 1773 робота. Сейчас ищет 841 программист ...

Взаимозаменяемые селекты

Тема в разделе "PHP для новичков", создана пользователем katama, 2 янв 2011.

  1. katama

    katama Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    16
    Симпатии:
    0
    Здравствуйте, есть два селекта, при выборе первого, должен смениться состав второго, это должно произойти без перезагрузки страницы. Как вывести список я то знаю в php, но нужно это всё сделать без перезагрузки... Как такое сделать? Или возможно есть готовые хорошие решения по этому поводу? Спасибо
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    katama
    это делается через javascript. если данные загружаются с сервера - ajax,
    если данных не так много, то можно выводить массив напрямую в страницу,
    и уже на самой странице фильтровать
     
  3. katama

    katama Активный пользователь

    С нами с:
    13 дек 2010
    Сообщения:
    16
    Симпатии:
    0
    В принципе я так и думал, а можно поконкретней как реализовать, если данных не так уж и много ... ? спасибо
     
  4. Feiron

    Feiron Активный пользователь

    С нами с:
    12 авг 2009
    Сообщения:
    22
    Симпатии:
    0
    [sql]
    <select id="mainselect" onchange="MyAjaxFunction;"><.............></select>
    <select id="secondselect" name=second><...></select>

    <script type="bla bla bla">
    /*
    Фреймворк jquery
    params = trigger - naprimer {'getSelect' : 1} и отправим значение селекта - что бы понять что там на выбирали получется примерно так {'getSelect' : 1, 'mainselect' : $('#mainselect').val()}
    function - функция обработки ответа сервера в неё приходят входные параметры, первый параметр хранит в себе ответ сервера на запрос, второй и третий параметр это для самостоятельной работы. Ответ сервера далее мы и обрабатываем.
    джсон формат данных - навыбор хсм, хтмл, джсон нужен для того что бы сформировать ответ в формате пригодным для обработки дальше джавой.
    */

    function MyAjaxFunction(){
    $.post(url,params,function lets_dance_over_result(data),'json') //например джсон? Лучше на самом деле именно он
    return true;
    /* Решил помочь тебе и не поленился отыскать пример $.post("test.php", { "name" : "John", "time" : "2pm" },
    function(data){
    alert("Data Loaded: " + data);
    });
    */
    }
    function lets_dance_over_result(data){
    var key,value;
    $.each(data,function(key,value){
    $('#secondselect').append('<option value=' + data[key].value..... +'>' + data[key].name + '</option>');
    });

    // Each я думаю и матрёне понятно, а вот append в тело текущего объекта в нашем случае селект, добавляет то что внутри скобок - в нашем случае мы добавляем опции селекту. Изначально в селекте может быть, и должен быть пустой опцион -заглушка ( это про валидную верстку) типа- веберите вначале в первом селекте. Хтмл теги и остальной мусор советую дописывать Джавой, а не выливать этот мусор ответом сервера - если у тебя 10001 тег опций - ты не хило сократишь таким образом трафик.
    </script>

    <?php
    //he hoy how
    if(isset($_POST['getSelect']) && $_POST['getSelect'] == 1 && isset($_POST['mainselect'])){
    //На самом деле важно проверить что к нам вообще пришло - но это уже тема других вопросов. В нашем случае мы проверяем дошло ли вообще что то?

    /*Lets say we have builded array = array{value => value, name => name} */
    $encoded = json_encode($array)
    echo $encoded;
    unset($encdoed);
    return true;
    }
    //Мы вернули ответ серверу в виде массива данных - сервер ждёт ответа в формате дсон(это формат - можно перевести как джава данные) и получив такой ответ он сразу все превратит в нормальный джава массив. И дальше - выше мы с ним работаем как data.value data.name выбирая ключи

    ?>[/sql]

    На самом деле в уже написанном тебе должно хватить сил разобраться и сделать то что ты хочешь.
    Есть НО - Кверь - библиотека надо скачать - или линк на google lib ( лучше скачать) функция json_encode не то что бы совсем встроенная в php но есть почти в любом ув-ем себя хостинге. Если нет её то не беда - можно например в хмл все конвертить - xml структуру если нет библиотек обработки можно и самому подгуглить и нарисовать - и через echo так же вывести ответ.
    Enjoy!