Поместите новые данные в blade @foreach в Laravel 5.8 - PullRequest
0 голосов
/ 07 мая 2019

1001 *
*

У меня есть тег select на моей странице, и параметры поступают из базы данных.
Когда я запускаю код JS, я получаю новый массив, который мне нужно передать, кроме старого (в новом массиве я получаю новые параметры)

<select name="category_id" class="form-control custom-select" id="variant_colour">
<option selected>Select variant...</option>
				@foreach($attributes_colour_selected as $variant)
        <option value="">{{$variant->attributes_colour}}</option>
				@endforeach
</select>

<script>
  $('#variant_model').change(function(){
    var value = $('select#variant_model').val();
    $.ajaxSetup({
    headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
    });
    $.ajax({
      type:"POST",
      url: "showVariantModel",
      data: {value:value},
      success: function(data){
      var attr = 'I don't know what to pass here';
      
      $('#variant_colour:last').append(attr);

      }
    })

  });
</script>	

Можете ли вы предложить самый простой способ изменить аргументы foreach. Новая переменная приходит из контроллера. Когда я пишу строку так:

<script>
var attr = '@foreach($attributes_colour_selected as $variant)'+
          'blablabla'+
          '@endforeach';
</script>

Ничего не работает ...

Ответы [ 2 ]

1 голос
/ 08 мая 2019

вы можете просто сделать foreach, так как вы не объяснили, какой тип массива вы возвращаете, поэтому я просто предположу, что это массив типа {key: value}, так что в вашей функции успеха

success: function(response){
  let select = document.querySelector('#variant_colour')
  select.innerHTML = '' //if you want to remove previous options 
  response.forEach((op)=>{
    select.innerHTML += `<option value=${op.id}>${op.value}</option>`
 })
}

Кроме того, вам нужно будет указать некоторое значение в атрибуте значения опции в своем блейде

<option value="{{ $variant->id }}">{{$variant->attributes_colour}}</option> //set some value example id
0 голосов
/ 08 мая 2019

Я думаю, вам следует использовать js для зацикливания данных.Я не знаю, какова структура, которая возвращает вызов ajax, но вы можете попробовать что-то вроде этого с jquery:

<script>
  $('#variant_model').change(function(){
    var value = $('select#variant_model').val();
    $.ajaxSetup({
    headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
    });
    $.ajax({
      type:"POST",
      url: "showVariantModel",
      data: {value:value},
      success: function(data){
        $.each(data, function (key, value) {
            $('#variant_colour').append("<option value='" + key + "'>" + value + "</option>");
        });
      }
    })

  });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...