首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环中的数据和ajax数据是不同的

循环中的数据和ajax数据是不同的
EN

Stack Overflow用户
提问于 2020-04-10 04:01:29
回答 1查看 36关注 0票数 0

foreach循环中有一些单选按钮和一些隐藏字段,但我在循环中犯了错误,无法获得正确的数据。因此,作为一个ajax错误: SQLSTATE 23000:完整性约束冲突: 1452无法添加或更新子行:一个外键约束失败错误。

Json文件如下

代码语言:javascript
复制
{"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
                    }

                ]
            }
        ]
    }
]

}

查看文件

代码语言:javascript
复制
@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

在上面的代码中,我添加了输入单选和隐藏在循环中的输入。

在相同的视图文件中,ajax如下所示。

代码语言:javascript
复制
<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 transaction error,因为它发送了错误的数据。

例如,当我查看页面源代码时,第二个单选按钮的值在HTML字段中如下所示。

代码语言:javascript
复制
<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附带的数据如下所示

代码语言:javascript
复制
option_id=2
poll_id=2
user_id=2

我做错了什么,我不知道是什么

诚挚的问候

EN

回答 1

Stack Overflow用户

发布于 2020-04-11 22:16:26

Ok问题已解决,循环文件和ajax变量中存在错误。

查看刀片文件

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61129309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档