Laravel 5.6 - Проблем с вземане на под категория

Ticketa

Registered
Привет,
имам проблем при "вземането" на под категория

router
Код:
Route::get('ajax-subcat', 'PropertyController@subcat');

в контролера
Код:
    public function subcat(Request $request){
        $cat_id = isset($request->cat_id) ? (int)$request->cat_id : 1;
        $subcategories = DB::table('properties_type')->where('parent_id', '=',$cat_id)->get(['id','name']);

        return response()->json(['data' => $subcategories]);
    }


resource view

Код:
                     <div class="form-group form-float">
                        <div class="form-line {{$errors->has('type') ? 'focused error' : ''}}">
                            <label>Изберете категория</label>
                            <select name="category" id="category" class="form-control">
                            <option value="0">-- Моля изберете --</option>
                            <?php
                            $PropertyType = App\PropertyType::where([['parent_id', '=', 0], ['type_id', '=', 1]])->get();
                            foreach ($PropertyType as $PTRow) {
                                echo '<option value="'.$PTRow->id.'">'.$PTRow->name.'</option>';
                            }
                            ?>
                            </select>
                        </div>
                    </div>
                    <div class="form-group form-float">
                        <div class="form-line {{$errors->has('subtype') ? 'focused error' : ''}}">
                            <label>Изберете под категория</label>

                            <select name="sub_category" id="subCategory" class="form-control">

                            </select>

                        </div>
                    </div>
js
Код:
        $(document).ready(function () {
           $('#category').change(function () {
             var id = $(this).val();
             $('#subCategory').find('option').not(':first').remove();
             $.ajax({

                url:'/admin/ajax-subcat?cat_id='+id,

                type:'get',

                dataType:'json',

                success:function (response) {

                    var len = 0;

                    if (response.data != null) {

                        len = response.data.length;

                    }
                    if (len>0) {

                        for (var i = 0; i<len; i++) {

                             var id = response.data[i].id;
                             var name = response.data[i].name;
                             var option = "<option value='"+id+"'>"+name+"</option>";
                             
                            $("#subCategory").append(option);

                        }

                    }

                }

             })

           });

        });

output ajax:
Код:
{"data":[{"id":"2","name":"\u0410\u043a\u0432\u0430\u0440\u0435\u043b"},{"id":"3","name":"\u041d\u0430\u0442\u044e\u0440\u043c\u043e\u0440\u0442"},{"id":"4","name":"\u041a\u0430\u0440\u0442\u0438\u043d\u0438 \u041f\u0435\u0439\u0437\u0430\u0436\u0438"},{"id":"5","name":"\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u0438"},{"id":"6","name":"\u041a\u0430\u0440\u0442\u0438\u043d\u0438 \u0441 \u0446\u0432\u0435\u0442\u044f"},{"id":"7","name":"\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u043d\u0430 \u0421\u0435\u043b\u0435\u043a\u0446\u0438\u044f"},{"id":"8","name":"\u041c\u043e\u0440\u0441\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u0438"},{"id":"9","name":"\u0425\u0438\u043f\u0435\u0440\u0440\u0435\u0430\u043b\u0438\u0437\u044a\u043c"},{"id":"10","name":"\u041d\u0430\u0438\u0432\u0438\u0437\u044a\u043c"},{"id":"11","name":"\u0416\u0438\u0432\u043e\u043f\u0438\u0441"},{"id":"12","name":"\u0413\u0440\u0430\u0444\u0438\u043a\u0430"},{"id":"13","name":"\u041f\u0440\u0438\u043b\u043e\u0436\u043d\u043e \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u043e"},{"id":"14","name":"\u0421\u043a\u0443\u043b\u043f\u0442\u0443\u0440\u0430"}]}
 
А какво точно имаш предвид под "не работи"? Не се тригърва заявката към ajax-a, при чейндж на select? Не се зареждат option-и в select-a за под категория? Провери ли конзолата на браузъра?

ПС:

- разгледай Blade
- ползвай @foreach @endforeach вместо <?php foreach....
- не прави заявки във view-то, а ги подавай на него
- виж как се валидират данни и показват грешки тук: https://laravel.com/docs/5.6/validation#quick-displaying-the-validation-errors
 
Зареждат , конзолата е дебъгнах и се вижда че се зареждат , просто не се визуализират.

Струва ми се че проблема идва от change функцията ? Или версията на jquery ?
 
Ticketa каза:
Зареждат , конзолата е дебъгнах и се вижда че се зареждат , просто не се визуализират.

Струва ми се че проблема идва от change функцията ? Или версията на jquery ?

Можеш да сложиш console.log() на различни места, които според теб не работят и да разбереш кое не работи. :)

Ето при мен как си работи: https://jsfiddle.net/q5dytkgx/2/

Без Minimal, Reproducible Example, ще се леят коментари в тази тема, гадещи, откъде би идвал проблема.

Най-вероятно, докато се опитваш да създадеш MCRE, ще откриеш и грешката :)
 
Revelation каза:
Сега ще се окаже, че има един голям display: none за #subCategory, който му крие селекта.

Първия код, който аз съм публикувал работи.

Махнах този style CSS, който съм го извикал и се появява (счупено, но се появява - подкатегориите)
<link rel="stylesheet" href="{{asset('backend/plugins/bootstrap-select/css/bootstrap-select.css')}}">
* Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)

Такава простотия не ми се беше случвала

Сега остава да разбера как се "бъгва" , че да го оправя

ЕДИТ: Добавих $('.selectpicker').selectpicker('refresh'); след
$("#subCategory").append(option);

И вече се реши проблема.
 
Покриваш ли всички изисквания? Има значение версията на jquery и bootstrap, които ползваш. Според зависи версията на bootstrap ти трябват други зависимости, за да го подкараш.

От това, което си дал не може да стане ясно какво имаш и какво нямаш.
 
Revelation каза:
Покриваш ли всички изисквания? Има значение версията на jquery и bootstrap, които ползваш. Според зависи версията на bootstrap ти трябват други зависимости, за да го подкараш.

От това, което си дал не може да стане ясно какво имаш и какво нямаш.

Сега проведох други тестове и се оказа , че работи полвинчато хахахахах. Ту сработва, ту не сработва.

Имам три категории като две от тях нямат подкатегории. Всякаш се "присвояват" под категориите , дори на празните категории (а не трябва)/*!

Bootstrap v3.3.6 (http://getbootstrap.com)
jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
Bootstrap-select v1.10.0 (http://silviomoreto.github.io/bootstrap-select)

ЕДИТ: Готово , добавих и
$("#subCategory").empty();

Като реда: $('.selectpicker').selectpicker('refresh'); , го смъкнах по надолу след края на if (len>0) {

Код:
        $(document).ready(function () {

           $('#category').change(function () {

             var id = $(this).val();


             $('#subCategory').find('option').not(':first').remove();


             $.ajax({

                url:'/admin/ajax-subcat?cat_id='+id,

                type:'get',

                dataType:'json',

                success:function (response) {

                    var len = 0;
                    $("#subCategory").empty();
                    if (response.data != null) {

                        len = response.data.length;

                    }
                    if (len>0) {
                        for (var i = 0; i<len; i++) {

                             var id = response.data[i].id;
                             var name = response.data[i].name;
                             var option = "<option value='"+id+"'>"+name+"</option>";
                             
                            $("#subCategory").append(option);
                        }

                    }
                            $('.selectpicker').selectpicker('refresh');

                }

             })

           });

        });
 

Горе