Данные в данных l oop и ajax различны - PullRequest
0 голосов
/ 09 апреля 2020

В поле foreach есть переключатели и некоторые скрытые поля l oop, но в l oop я допускаю ошибки и не могу получить правильные данные. Следовательно, как ошибка ajax: SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ошибка ограничения внешнего ключа.

Json файл ниже

{"data":[
    {
       "id":1,
       "question":"Test Question 1",
       "description":"Test Poll Desription",
       "creator_id":1,
       "results_count":2,
       "message_type":"poll",
       "poll_result":3,
       "creator":{
          "id":1,
          "name":"Test",
          "email":"test@hotmail.com",
          "created_at":"2019-05-28T23:29:59.000000Z",
          "updated_at":"2020-02-28T18:37:20.000000Z"

        },
       "option":[
            {
                "id":1,
                "poll_id":1,
                "option":"Test 1 Title",
                "poll_results_count":0,
                "poll_results":[ 
                ]

            },
            {
                "id":2,
                "poll_id":1,
                "option":"Test 2 Title",
                "poll_results_count":0,
                "poll_results":[

                ]
            },
            {
             "id":3,
             "poll_id":1,
             "option":"Test 3 Title",
             "poll_results_count":2,
             "poll_results":[
                    {
                    "id":1,
                    "poll_id":1,
                    "poll_option_id":3,
                    "user_id":4
                    },
                    {
                    "id":34,
                    "poll_id":1,
                    "poll_option_id":3,
                    "user_id":9
                    }

                ]
            }
        ]
    }
]

}

просмотр файла

@foreach ($data['option'] as $key_option => $option)
                        <label class="checkerCircle">
                            {{ isset($option['option']) ? $option['option'] : 'Default' }}
                                   <div class="progress-container">
                                        <div class="progress">
                                            <div class="progress-5"></div>
                                        </div>
                                        <span>
                                            @if ($option['poll_results_count'] == 0)
                                                0%
                                            @else
                                                @php
                                                    $yuzde = (100/$sum)*$option['poll_results_count'];
                                                    echo $yuzde."%";
                                                @endphp
                                            @endif

                                        </span>
                                   </div>
                                <input type="hidden" name="poll_id" value="{{ $option['poll_id'] }}">
                                <input type="radio" name="option_id" value="{{ $option['id'] }}">
                                <input type="hidden" name="user_id" value="{{Auth::user()->id}}">
                                   <span class="checkerCircle__span"></span>
                        </label>
                          @endforeach

В вышеприведенном коде я добавил радио и ввод, скрытый в l oop.

В том же файле просмотра, ajax выглядит следующим образом.

<script type="text/javascript">
        $(document).ready(function(){
            $('input[type="radio"]').click(function(){
                var option_id = $(this).val();
                var poll_id = $(this).val();
                var user_id = $(this).val();
                $.ajax({
                    url: "{{ route('pool.ajax.home')}}",
                    type: "POST",
                    dataType: 'json',
                    data:{
                        "_token": "{{ csrf_token() }}",
                        option_id:option_id,
                        poll_id:poll_id,
                        user_id:user_id,
                    },
                    success:function(response){
                        console.log(response);
                    },
                    error:function(e){
                        console.log(JSON.stringify(e));
                        console.log('error');
                    }
                });
                return false;
            });
        });
    </script>

После этих процессов работает только первый ввод. Когда я нажимаю второй или третий переключатель, он выдает sql ошибку транзакции, поскольку отправляет неверные данные.

Когда я, например, смотрю исходный код страницы, значение 2-го переключателя выглядит например, в поле HTML.

<input type="hidden" name="poll_id" value="1">
<input type="radio" name="option_id" value="2">
<input type="hidden" name="user_id" value="9">

, но данные, которые поставляются с ajax, выглядят следующим образом

option_id=2
poll_id=2
user_id=2

Я где-то что-то пропустил или ошибся, я не не знаю, что

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 11 апреля 2020

ОК, проблема решена. В файле l oop и ajax переменных произошла ошибка.

Просмотреть файл блейда

<div class="l-flex">
    @php
        $sum = array_sum(array_column($data['option'],'poll_results_count'));
    @endphp
    @foreach ($data['option'] as $key_option => $option)
    <label class="checkerCircle">
        {{ isset($option['option']) ? $option['option'] : 'Default' }}
               <div class="progress-container">
                    <div class="progress">
                        <div class="progress-5"></div>
                    </div>
                    <span>
                        @if ($option['poll_results_count'] == 0)
                            0%
                        @else
                            @php
                                $yuzde = (100/$sum)*$option['poll_results_count'];
                                echo $yuzde."%";
                            @endphp
                        @endif

                    </span>
               </div>
            <input type="hidden" id="{{ $option['id'] }}" name="poll_id" value="{{ $option['poll_id'] }}">
            <input type="radio" name="option_id" value="{{ $option['id'] }}" >

               <span class="checkerCircle__span"></span>
    </label>
      @endforeach
      <input type="hidden" name="user_id" value="{{Auth::user()->id}}">
</div>

Следующий код принадлежит ajax

<script type="text/javascript">
        $(document).ready(function(){
            $('input[type="radio"]').click(function(){
                var option_id = $(this).val();
                var poll_id = $('input#'+option_id+'').val();
                var user_id = $('input[name="user_id"]').val();
                $.ajax({
                    url: "{{ route('pool.ajax.home')}}",
                    type: "POST",
                    dataType: 'json',
                    data:{
                        "_token": "{{ csrf_token() }}",
                        option_id:option_id,
                        poll_id:poll_id,
                        user_id:user_id,
                    },
                    success:function(response){
                        console.log(response);
                        location.reload(true);
                    },
                    error:function(e){
                        console.log(JSON.stringify(e));
                        console.log('error');
                    }
                });
                return false;
            });
        });
    </script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...