Сбор нескольких данных и отправка по Ajax в Laravel - PullRequest
0 голосов
/ 01 сентября 2018

Я использую ajax для отправки моих данных в контроллер и сохранения их в базе данных, прежде чем мой код заработал, тогда мне нужно было отсортировать мои данные, когда они добавляются в blade-сервер, после сортировки они перестают работать на% 50.

Полезно знать

Вот мой старый код и решение для сортировки моих данных (что вызвало этот вопрос у меня сейчас)

Logic

  1. Я выбираю набор
  2. Набор дочерних элементов будет добавляться в блейд (отсортировано по пользовательскому столбцу)
  3. Я выбираю один или несколько параметров и нажимаю кнопку сохранения
  4. Данные сохраняются в базе данных

Больше знать

Мои добавленные данные (на основе выбранного набора) включают 2 типа данных

  1. Пользовательские вводы (текстовое поле и поле текстовой области), которые я могу заполнить и сохранить вручную ( все еще работает без проблем )
  2. Опция динамического выбора, которая возвращается из базы данных, и я могу выбрать и сохранить их идентификаторы ( это динамика проблемы )

Код

Script of appending data

<script defer>
$(document).ready(function() {
    $('select[name="selectset"]').on('change', function() {
        var id = $(this).val();
        if(id) {
            $.ajax({
                url: '{{ url('admin/selectset') }}/'+encodeURI(id),
                type: "GET",
                dataType: "json",
                success:function(result) {
                    $('div#dataaamsg').empty();
                    $('div#dataaamsg').append('Use <kbd>CTRL</kbd> or <kbd>SHIFT</kbd> button to select multiple options');
                    result.sort(function(a,b) {
                        return (a.position > b.position) ? 1 : ((b.position > a.position) ? -1 : 0);
                    });

                    $.each(result, function(key1, value1) {

                        var vvvid = value1.id;

                        if(value1['type'] == 'textfield'){
                            var my_row = $('<div class="row mt-20 ccin">');
                            $('div#dataaa').append(my_row);
                        }else if(value1['type'] == 'textareafield'){
                            var my_row = $('<div class="row mt-20 ccin">');
                            $('div#dataaa').append(my_row);
                        }else{
                            var my_row = $('<div class="row mt-20">');
                            $('div#dataaa').append(my_row);
                        }

                        // second data
                        $.ajax({
                            url: '{{ url('admin/findsubspecification') }}/'+value1['id'],
                            type: "GET",
                            dataType: "json",
                            success:function(data) {
                                // Check result isnt empty
                                var helpers = '';
                                $.each(data, function(key, value) {
                                    helpers += '<option value="'+value.id+'">'+value.title+'</option>';
                                });

                                if(value1['type'] == 'textfield'){
                                    var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><input name="specification_id" id="specification_id" type="hidden" value="'+vvvid+'"><div class="col-md-4">'+value1.title+'</div>';
                                    my_html += '<div class="col-md-6"><input id="text_dec" name="text_dec[]" placeholder="text field" class="text_dec form-control"></div>';
                                    my_html += '<div class="col-md-2"><button type="button" id="custmodalsavee" class="custmodalsavee btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
                                    my_row.html(my_html);
                                }else if(value1['type'] == 'textareafield'){
                                    var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><input name="specification_id" id="specification_id" type="hidden" value="'+vvvid+'"><div class="col-md-4">'+value1.title+'</div>';
                                    my_html += '<div class="col-md-6"><textarea id="longtext_dec" name="longtext_dec[]" placeholder="text area field" class="longtext_dec form-control"></textarea></div>';
                                    my_html += '<div class="col-md-2"><button type="button" id="custmodalsavee" class="custmodalsavee btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
                                    my_row.html(my_html);
                                }else{
                                    var my_html = '{{ Form::open() }}<input name="product_id" id="product_id" type="hidden" value="{{$product->id}}"><div class="col-md-4">'+value1.title+'</div>';
                                    my_html += '<div class="col-md-6"><select class="subspecifications form-control tagsselector" id="subspecifications" name="subspecifications[]" multiple="multiple">'+helpers+'</select></div>';
                                    my_html += '<div class="col-md-2"><button type="button" id="savedynspecto" class="savedynspecto btn btn-xs btn-success">Save</button>{{Form::close()}}</div>';
                                    my_row.html(my_html);
                                }


                            }
                        });
                        // second data

                    });
                }
            });
        }else{
            $('div#dataaa').empty();
        }
    });
});
</script>

script of saving data (issue part)

<script defer>
  $(document).ready(function() {
   $("body").on("click", ".savedynspecto", function(e){
      var form = $(this).closest('form');
      var id = form.find('input[name="product_id"]').val();
      // e.preventDefault();
      $.ajax({
        type: "post",
        url: '{{ url('admin/spacssendto') }}',
        data: {
          '_token': $('input[name=_token]').val(),
          'product_id': id,
          'subspecifications': $(this).closest('form').find('select.subspecifications').val()
        },
        success: function (data) {
          alert('Specifications added successfully.');
          console.log($(this));
        },
        error: function (data) {
          console.log(data);
        }
      });
    });
  });
</script>

Выпуск

  1. Когда я пытаюсь сохранить свои динамические значения, я не могу получить идентификатор выбранной опции / опций

    // возвращаем данные в параметрах сети _token g1GnKZvzXDztR1lqgDdjI5QOg67SfmmBhjm80fKu product_id 18 subspecifications

Ps1

Я пытался изменить val() на serialize(), и я получил

_token g1GnKZvzXDztR1lqgDdjI5QOg67SfmmBhjm80fKu
product_id 18
subspecifications subspecifications%5B%5D=20&subspecifications%5B%5D=21&subspecifications%5B%5D=23&subspecifications%5B%5D=32"

Все, что мне было нужно, это 21,23,32, вместо этого я получил subspecifications%5B%5D= перед каждым из них.

Ps2

Я пытался изменить $("body").on("click", ".savedynspecto", function(e){, чтобы он не отправлял никакие данные на сервер (в сети ничего не печатается, даже коды ошибок)

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Привет, измени эту строку в своем коде

'subspecifications': $ (Это) .closest ( 'форма'). Найти ( 'select.subspecifications'). Val ()

до

'subspecifications': $ (Это) .closest ( 'форма'). Найти ( 'select.subspecifications option: selected '). map (function () {return this.value}). get ()

Это должно помочь

0 голосов
/ 09 сентября 2018

У вас есть МНОГИЕ select с классом subspecifications ... Таким образом, вы должны просмотреть их, чтобы получить их значения.

<script defer>
  $(document).ready(function() {
   $("body").on("click", ".savedynspecto", function(e){
      var form = $(this).closest('form');
      var id = form.find('input[name="product_id"]').val();

      // An array to store the subspecifications values.
      var spec_array = [];

      // A loop to go through all them.
      form.find('select.subspecifications').each(function(){
        spec_array.push($(this).val());
      });

      // e.preventDefault();
      $.ajax({
        type: "post",
        url: '{{ url('admin/spacssendto') }}',
        data: {
          '_token': $('input[name=_token]').val(),
          'product_id': id,
          'subspecifications': spec_array  // The array containing each SELECT values
        },
        success: function (data) {
          alert('Specifications added successfully.');
          console.log($(this));
        },
        error: function (data) {
          console.log(data);
        }
      });
    });
  });
</script>
0 голосов
/ 01 сентября 2018

После кнопки ... в строке для добавления, у вас есть {{Form::close()}}</div>.

Я думаю, что </div> должно предшествовать {{Form::close()}}.

Запутанная структура HTML может быстро привести к странностям.
Я не уверен на 100%, что это проблема ... Но это может.

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