Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не загружается селект через ajax (https://javascript.ru/forum/misc/53885-ne-zagruzhaetsya-selekt-cherez-ajax.html)

kiberchainik 23.02.2015 19:25

Цитата:

Сообщение от danik.js (Сообщение 357973)
Потому что result равен null, потому что сервер ответил пустотой, потому что в коде стоит return раньше времени, потому что кодер дибил. Не беси блин, тебе сказали в чем дело, а ты быкуешь. Могу конечно ошибаться, но у тя че, рука отвалится если попробуешь убрать return?

прости! но не быкую и не бешу)))) я просто -10 в яве)) и туплю от не знания) там несколько ретурнов откуда именно убрать??? или методом перебора?

danik.js 23.02.2015 20:16

Я вижу только один return true. А ты сколько видишь?
Вообще, там не должно быть ни одного return'а. При любой проблеме должен выводиться json_encode с сообщением об ошибке.
Цитата:

Сообщение от kiberchainik
в яве

Какая ява? Про пхп вроде речь.

kiberchainik 23.02.2015 20:32

Цитата:

Сообщение от danik.js (Сообщение 357981)
Я вижу только один return true. А ты сколько видишь?
Вообще, там не должно быть ни одного return'а. При любой проблеме должен выводиться json_encode с сообщением об ошибке.
Какая ява? Про пхп вроде речь.

я убрал ретурн из пхп кода, теперь у меня на странице вверху всего появился вывод {"type":"error"} благодаря print json_encode($result);
ну и скрипт тоже заработал, но как теперь избежать этого вывода {"type":"error"}???


млять, не срачка так пердячка!

kiberchainik 23.02.2015 21:03

и тут же второй вопрос, как можно реализовать такую штуку ...
вот есть основной селект в нем выбраешь пункт, и например 3 нижних селекта одновременно заполняются из базы без перезагрузки???

у меня такое видение реализации:
есть основной селект в котором мы делаем выбор и ажаксом посылаем запрос на сервер. на сервере делать выбор для нижних трех селектов и заключать их в переменные, например,
$select1 = "<select name='1'>
    <option value='1'>1</option>
    <option value='11'>11</option>
    <option value='12'>12</option>
</select>";

$select2 = "<select name='2'>
    <option value='2'>2</option>
    <option value='21'>21</option>
    <option value='22'>22</option>
</select>";

$select3 = "<select name='3'>
    <option value='3'>3</option>
    <option value='31'>31</option>
    <option value='32'>32</option>
</select>";


потом в яву передать их массивом и там уже распределить по странице

danik.js 23.02.2015 21:14

Да, можно так. Только необязательно передавать html. Можно чисто массивы данных, а селекты создавать на js.
Цитата:

Сообщение от kiberchainik
как теперь избежать

Выполни sql-запрос из phpmyadmin.

kiberchainik 23.02.2015 21:39

Цитата:

Сообщение от danik.js (Сообщение 357988)
Выполни sql-запрос из phpmyadmin.

т.е.???

kiberchainik 24.02.2015 00:47

я тут вот что еще сделал))) только ты сильно не психуй! ))))
<div id="dataf">
            <div>
                <select name="filter_id" onchange="javascript:selectRegion();">
                    <option value="0">- seleziona filtro -</option>
                    <?=$query->selectFiltri()?>
                </select>
            </div>
            <p>
                Larghezza: <input type="text" name="altezza" value="" style="width: 40px;" />&nbsp;x
                Altezza: <input type="text" name="larghezza" value="" style="width: 40px;" />
            </p>
            <div name="selectTipologia"></div>
            <div name="selectProfilo"></div>
            <div name="selectManiglia"></div>
            <div name="selectColore"></div>
            <div name="selectVetro"></div>
            <div name="selectVetroDecorativo"></div>
        </div>


function selectRegion(){
        var filter_id = $('select[name="filter_id"]').val();
        if(!filter_id){
                $('div[name="selectTipologia"]').html('');
                $('div[name="selectProfilo"]').html('');
                $('div[name="selectManiglia"]').html('');
                $('div[name="selectColore"]').html('');
                $('div[name="selectVetro"]').html('');
                $('div[name="selectVetroDecorativo"]').html('');
        }else{
                $.ajax({
                        type: "POST",
                        url: "filter.php",
                        data: { action: 'showFilterForInsert', filter_id: filter_id },
                        cache: false,
                        success: function(responce){
                            
                            var optipologi = '';
                            $(responce.selectTipologia.tipologi).each(function() {
                                optipologi += '<option value="' + $(tipologi).attr('id') + '">' + $(tipologi).attr('nome_corto') + '</option>';
                            });
                            
                            var opprofili = '';
                            $(responce.selectProfilo.profili).each(function() {
                                opprofili += '<option value="' + $(profili).attr('id') + '">' + $(profili).attr('nome_corto') + '</option>';
                            });
                            
                            $('div[name="selectTipologia"]').html('<select name="Tipologia">'+optipologi+'</select>');
                            $('div[name="selectProfilo"]').html('<select name="Profilo">'+opprofili+'</select>');
                            //$('div[name="selectManiglia"]').html(selectManiglia);
                            //$('div[name="selectColore"]').html(selectColore);
                            //$('div[name="selectVetro"]').html(selectVetro);
                            //$('div[name="selectVetroDecorativo"]').html(selectVetroDecorativo);
                        }
                });
        };
};


$sql = mysql_connect("localhost", "000", "000");
    
    if (!$sql) {
        echo "MySQL сервер недоступен! ".mysql_error();
    } else {
        $select = mysql_select_db("000", $sql);
        
        if (!$select) {
            echo "Нет соединения с БД".mysql_error();
        }
    }

    if ($_POST['showFilterForInsert']){
        
        $Tipologia = mysql_query("SELECT id, nome_corto FROM criteri WHERE id_filter='".$_POST['filter_id']."' AND meta='Tipologia'");
        if ($Tipologia) {
            $num = mysql_num_rows($Tipologia);      
            $i = 0;
            while ($i < $num) {
               $tipologi[$i] = mysql_fetch_object($Tipologia);   
               $i++;
            }     
            $selectTipologia = array('tipologi'=>$tipologi);  
        }
        
        $Profilo = mysql_query("SELECT id, nome_corto FROM criteri WHERE id_filter='".$_POST['filter_id']."' AND meta='Profilo'");
        if ($Profilo) {
            $num = mysql_num_rows($Profilo);      
            $i = 0;
            while ($i < $num) {
               $profili[$i] = mysql_fetch_object($Profilo);   
               $i++;
            }     
            $selectProfilo = array('profili'=>$profili);  
        }
        
        $responce = array('selectTipologia' => $selectTipologia, 'selectProfilo' => $selectProfilo);
        print json_encode($selectTipologia);
    }


ошибка в том что селекты показываются но пустые, не знаю как правильно вывести!

danik.js 24.02.2015 04:44

Цитата:

Сообщение от kiberchainik
<div name="selectManiglia"></div>

У дива не может быть name. Но это не влияет ни на что. Так, к слову.
Цитата:

Сообщение от kiberchainik
$(tipologi).attr('id')

Это откуда берется?
И вообще, что именно не работает? Я подсказал инструменты, которыми можно локализовать проблему.

kiberchainik 24.02.2015 09:20

Цитата:

Сообщение от danik.js (Сообщение 358007)
.
Это откуда берется?.

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

kiberchainik 24.02.2015 15:00

Цитата:

Сообщение от danik.js (Сообщение 358007)
теперь у меня на странице вверху всего появился вывод {"type":"error"} благодаря print json_encode($result);
ну и скрипт тоже заработал, но как теперь избежать этого вывода {"type":"error"}???

ну помоги уже чайнику, пожаааалуйста!!!:)


Часовой пояс GMT +3, время: 00:47.