Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 26.05.2016 17:59:19

Alex_01

Как итерировать json?

Доброго времени суток.
Столкнулся с проблемой. Получаю получаю через ajax json, приходит объект.Как распечатать его?
Отправляю и получаю json

    $('#filter_template').change(function() {
        $.ajax({
            type: 'post',
            dataType: 'json',
            url: 'http://demo.app/admin/api/filters',
            data: {
                cat_id: $('#filter_template').val()
            },
            headers: {
                'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
            },
            success: function(jsondata){
                $.each(jsondata, function(i, value) {
                    $('#results').find('#list').append($('<li>')).text(i.name)
                });
                console.log(jsondata);
            }
        });
    });

Вот функция которая отдает json

    public function getCatID(Request $request)
    {
        $cat_id = $request->input('cat_id');

        $filter_data = FilterGroup::with('filters')->where('category_id',$cat_id)->get();

        $filter_data->toArray();

        return response()->json($filter_data);
    }

Вот как приходят данные
s_1464274669_8225013_45d9a6ea8b.png

#2 26.05.2016 18:01:12

#3 26.05.2016 19:34:09

Alex_01

Re: Как итерировать json?

Мне бы на jquery пример с функцией each()

#4 26.05.2016 19:40:14

Re: Как итерировать json?

как народ обленился уже...

Не в сети

#5 26.05.2016 19:43:19

Re: Как итерировать json?

Совершенно не понял что вам нужно.
у вас же в келбеке success идет итерация по jsondata

Не в сети

#6 26.05.2016 20:08:27

Re: Как итерировать json?

yuraoff пишет:

Совершенно не понял что вам нужно.
у вас же в келбеке success идет итерация по jsondata

Кстати да )

$.each(jsondata, function(i, value)

Только вот тут лажа
> text(i.name)

Согласно документации
http://api.jquery.com/jquery.each/
i = indexInArray
.name от него не может быть

Не в сети

#7 26.05.2016 20:16:29

Re: Как итерировать json?

VitalN пишет:

Кстати да )

$.each(jsondata, function(i, value)

Только вот тут лажа
> text(i.name)

Ну не то чтобы безвыходная ситуация) нужна заменить i на value
text(value.name)

Да и строка $('#results').find('#list').append($('<li>')).text(i.name), если #list это уникальный айдишник, зачем делать find?

Изменено yuraoff (26.05.2016 20:18:13)

Не в сети

#8 26.05.2016 20:44:04

alex_01

Re: Как итерировать json?

hzone пишет:

как народ обленился уже...

Причем тут лень? Что мне поделать, если я аяксом плохо владею, а гугл толком нормальных ответов не выдает.

#9 26.05.2016 20:45:51

Alex_01

Re: Как итерировать json?

yuraoff пишет:

Совершенно не понял что вам нужно.
у вас же в келбеке success идет итерация по jsondata

Хочу сделать примерно это, только на jquery

<ul class="list-inline">
                                @foreach($filter_group as $group)
                                    <li class="col-sm-4 text-center">
                                        <label for="filters">{{ $group->name }}
                                            {!! Form::select('filters[]',$group->filters->lists('name','id'),null) !!}
                                        </label>
                                    </li>
                                @endforeach
                            </ul>

#10 27.05.2016 11:34:56

Alex-01

Re: Как итерировать json?

Почти получилось. Теперь только не могу сделать так, что бы возле названия группы фильтров, был список с его фильтрами.

$('#filter_template').change(function() {
        $.ajax({
            type: 'post',
            dataType: 'json',
            url: '{{ url('admin/api/filters') }}',
            data: {
                cat_id: $('#filter_template').val()
            },
            headers: {
                'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
            },
            success: function(jsondata){
                $.each(jsondata, function(i, value) {
                    var output = "<li class=\"col-sm-4 text-center\">" + "<label>" + value.name + "</label>" + "</li>";
                    $('#results').append(output);
                    $.each(value.filters, function(i, filter) {
                        var select = "<select id=\"filterselect\" name=\"filters[]\">" + "</select>";
                        $('#results').find('li').append($('<option>'),{value: filter.id, text: filter.name});
                        console.log(value.name + ':' + filter.name);
                    });
                });
            }
        });
    });

В консоле все правильно

Количество ядер процессора:2
Количество ядер процессора:4
Количество ядер процессора:8
Оперативная память:2гб
Оперативная память:4гб
Оперативная память:8гб
Оперативная память:16гб
Год выпуска:2016
Год выпуска:2015
Год выпуска:2014

Помогите пожалуйста кто jquery хорошо знает

#11 27.05.2016 11:45:22

Re: Как итерировать json?

Причем тут знания jquery
Это же логика элементарная

>var select = "<select id=\"filterselect\" name=\"filters[]\">" + "</select>";
Создал строку с селектом - молодец
Дальше то что? ее наверное куда-то вставить надо?

>$('#results').find('li').append($('<option>'),{value: filter.id, text: filter.name});

Читай что делаешь:
1) $('#results') = нашли элемент с id=results
2) find('li') Нашли внутри него элементы li
3) .append($('<option>') Добавили в них элементы  option

Не в сети

#12 27.05.2016 12:00:40

Re: Как итерировать json?

Виталь, ты отработал, а ЗП упадёт Алексу smile

Alex-01, DOM модельку изучить сложно и на ней на лету делать? smile
Ты либо вопрос не правильно поставил либо так правильно, что я аплодирую ))

Не в сети

#13 27.05.2016 12:27:58

Alex_01

Re: Как итерировать json?

VitalN пишет:

Причем тут знания jquery
Это же логика элементарная

>var select = "<select id=\"filterselect\" name=\"filters[]\">" + "</select>";
Создал строку с селектом - молодец
Дальше то что? ее наверное куда-то вставить надо?

>$('#results').find('li').append($('<option>'),{value: filter.id, text: filter.name});

Читай что делаешь:
1) $('#results') = нашли элемент с id=results
2) find('li') Нашли внутри него элементы li
3) .append($('<option>') Добавили в них элементы  option

Так я вот и не знаю, как бы теперь эту переменную 'var select' впихнуть, что бы она встала после '<label>" + value.name +'

#14 27.05.2016 12:28:51

Alex_01

Re: Как итерировать json?

hzone пишет:

Виталь, ты отработал, а ЗП упадёт Алексу smile

Alex-01, DOM модельку изучить сложно и на ней на лету делать? smile
Ты либо вопрос не правильно поставил либо так правильно, что я аплодирую ))

Я еще бездарь в этом, так что нет ни какой зп)

#15 27.05.2016 12:41:46

Alex_01

Re: Как итерировать json?

hzone пишет:

Виталь, ты отработал, а ЗП упадёт Алексу smile

Alex-01, DOM модельку изучить сложно и на ней на лету делать? smile
Ты либо вопрос не правильно поставил либо так правильно, что я аплодирую ))

Вопрос изначально который был задан, уже исчерпан.
Дабы было понятно, покажу что я хочу сделать.
При выборе категории из списка, на сервер отправляется ее id, и прилетают все группы фильтров вместе с фильтрами которые к ней относятся.
На php это выглядит так

<ul class="list-inline">
    @foreach($filter_group as $group)
        <li class="col-sm-4 text-center">
            <label for="filters">{{ $group->name }}
                {!! Form::select('filters[]',$group->filters->lists('name','id'),null) !!}
            </label>
        </li>
    @endforeach
 </ul>

Но это я просто тупо все группы фильтров передал в вьюху.
Хочу что бы такая красота, при выборе селекта отрисовывалась на аяксе.
И проблема на которой я сейчас остановился, это как вписать долбанный селект с фильтрами, после названия группы фильтров

#16 27.05.2016 14:46:01

Re: Как итерировать json?

hzone пишет:

Виталь, ты отработал, а ЗП упадёт Алексу smile

Так я решения не дал готового. Считаю, это вредно smile)
Просто хочется как-то намекнуть, что кроме тупой копипасты есть  еще  моСК и логика.. Имя пользоваться полезно.

Не в сети

#17 27.05.2016 14:47:44

Re: Как итерировать json?

>Хочу что бы такая красота, при выборе селекта отрисовывалась на аяксе.
Не шаришь в ява-скрипте, возвращай не жысон и отрендеренный кусок шаблона
Блока <ul class="list-inline"> например
И заменяй его на странице

Не в сети

#18 28.05.2016 12:24:42

Alex_01

Re: Как итерировать json?

Спасибо всем кто направил меня на истинный путь и помог) все сделал)

<script type="text/javascript">
    $('#filter_template').change(function() {
        $.ajax({
            type: 'post',
            dataType: 'json',
            url: '{{ url('admin/api/filters') }}',
            data: {
                cat_id: $('#filter_template').val()
            },
            headers: {
                'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
            },
            success: function(jsondata){
            	$.each(jsondata, function(index, filter_group) {
                    var li = "<tr><td>" + filter_group.name + "</td></tr>";
                    var select = "<td><select name=\"filters[]\" id=\"filters" + filter_group.id + "\"></td>" + "</select>";
                    var group = $('#results').append($(li).append(select));
                    $.each(filter_group.filters, function(index, filter){
                        group.find($('#filters' + filter_group.id)).append($("<option></option>", {value: filter.id, text: filter.name}));
                    })
            	});
            }
        });
    });
</script>

http://ru.stackoverflow.com/questions/5 … %B2-select

Подвал раздела