首页 > 解决方案 > 使用 foreach 将结果 ajax 传递给刀片

问题描述

我正在尝试将ajax响应传递给我的视图并将其用作foreach的变量,我需要它来更新用户选择的日期可用的自行车数量我使用的程序是:我在日历,我通过ajax将它们从控制器传递给我的控制器我在数据库上执行查询并将带有数据的json返回给ajax。

必须循环ajax数据以将相应的数量分配给类别,但我不知道如何将此数据传递给视图

我的观点

 @foreach ($category as $cat)
  <div class="col pb-5 m-1">
      <?php 
      
      
      $categoryId=DB::table('categories')->select('id')->orderBy('id', 'asc')->get();
          foreach ($categoryId as $key) {
 
              
              $quantity[$key->id]=DB::table('bikes')->where('category_id','=',$key->id)->count('*');
          }
      ?>
      <div class="card cat m-auto position-relative " id="cat{{$cat->id}}" > 
          @foreach ($qty as $item=>$val)
          @if ($item==$cat->id) 
          <p class="m-3" id="numberqty" style="font-weight: bold;color:#ce2e30;text-shadow: 2px 5px 3px rgba(150, 150, 150, 0.92);">{{-- x{{$val}} --}}</p> 
          @endif
          @endforeach
          <p class="check position-absolute" style="display: none"><i class="fa fa-check" aria-hidden="true"></i></p>

          <input class="cat-id" type="number" value="{{$cat->id}}" hidden>
          <input class="id-cat" type="checkbox" name="category[]" id="category" value="{{$cat->id}}" hidden>
          <img class="card-img-top p-3" src="{{asset('storage/'.$cat->cover_image)}}" alt="">
          <div class="card-body my-n3">
              <h3 class="card-title text-center" style="text-shadow: 2px 5px 3px rgba(150, 150, 150, 0.92);">{{$cat->tipo}}</h3>


                      
                  {{-- <h3 class="card-title">Disponibilità: {{$val}}</h3> --}}
                      
                          <button class="btn btn-primary pl-5 pr-5 ml-5 drop"  type="button">{{__('payment.page.price')}}</button>

                          <button class="btn btn-primary pl-5 pr-5"  type="button">Dettagli</button>

              
              

              <div class="show-drop" style="display: none">
                  <h3 class="text-center my-1">{{__('payment.page.price')}}</h3>
                  
                  <p class="text-center">    {{__('payment.page.1day')}} {{$cat->base}} </p> <hr>
                  <p class="text-center">     {{__('payment.page.2day')}} {{$cat->twoDay}}</p> <hr>
                  <p class="text-center">     {{__('payment.page.3day')}} {{$cat->threeDay}}</p> <hr>
                  <p class="text-center">    {{__('payment.page.4day')}} {{$cat->fourDay}}</p> <hr>
                  <p class="text-center">   {{__('payment.page.5day')}} {{$cat->fiveDay}}</p> <hr>
                  <p class="text-center">     {{__('payment.page.6day')}} {{$cat->sixDay}}</p> <hr>
                  <p class="text-center">   {{__('payment.page.7day')}} {{$cat->sevenDay}}</p>
                  <p class="text-center">   {{$cat->overprice}} {{__('payment.page.overprice')}}</p>
                  {{-- <p>{{$cat->overprice}}</p> --}}

              </div>

              
          </div>

      </div>
      <div class="number-drop" style="display: none">
          <label for="quantity{{$cat->id}}">Nome</label>
          <input name="{{$cat->id}}" type="number" id="quantity{{$cat->id}}" class="form-control" value="0" >
      </div>
  </div>
  @endforeach

我的阿贾克斯

    $('#range_date').on('change', function(){
        
        var data = $(this).val();
        var split = data.split(' - ');
        var startDate = split[0];

        var dayStart = startDate.substr(0,2);
        var monthStart = startDate.substr(3,2);
        var yearStart = startDate.substr(6,4);

        var startCorrect = monthStart+"/"+dayStart+"/"+yearStart;
        console.log(startCorrect);



        var endDate = split[1];
        var dayEnd = endDate.substr(0,2);
        var monthEnd = endDate.substr(3,2);
        var yearEnd = endDate.substr(6,4);

        var endCorrect = monthEnd+"/"+dayEnd+"/"+yearEnd;
        console.log(endCorrect);


        var  date1 = new Date(startCorrect);
        var  date2 = new Date(endCorrect);
        var  diffTime = Math.abs(date2 - date1);
        var  diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); 


        $.ajax({
            
            "url": "bookingCheck",
            "data": {
                "start": startCorrect,
                "end":endCorrect
                
            },
            "method": "GET",
            success: function (response) {
                let res = response;
                let qty = res['qty'];

                console.log(qty);
                
               document.getElementById('numberqty').innerHTML=qty;
                $('#numberqty').html(qty.html);

            }
        });
    });

我的控制器

    public function checkBike(Request $request){
        $date1=Carbon::parse($request->start)->format('Y-m-d');
        $date2=Carbon::parse($request->end)->format('Y-m-d');
        

        $contract=DB::table('contracts')->get();
        $contractdate=DB::table('contracts')->whereRaw('? between data_inizio and data_fine', [$date1,$date2])->get();

        if (count($contractdate) > 0) {

            foreach ($contractdate as $key) {
                $id=$key->id;
            }
            $bikeContract=DB::table('bike_contract')->where('contract_id','=',$id)->get();
    
            foreach ($bikeContract as $key) {
                $bikeselect[$key->id]=DB::table('bikes')->where('id','=',$key->bike_id)->get();
                
            }
    
            foreach ($bikeselect[$key->id] as $key) {
                $idcat=$key->category_id;
                $quantity=DB::table('bikes')->select('category_id')->whereNotIn('category_id',[$idcat])->get();
            }
            foreach ($quantity as $key) {
                $qty[$key->category_id]=DB::table('bikes')->where('category_id','=',$key->category_id)->count('*');
            }
            return response()->json(["qty"=>$qty]);
        } else {
            $categoryId=DB::table('categories')->select('id')->orderBy('id', 'asc')->get();
                foreach ($categoryId as $key) {
            
                    $quantity[$key->id]=DB::table('bikes')->where('category_id','=',$key->id)->count('*');
                }
        return response()->json(["qty"=>$quantity]);
        }
    }
}

标签: ajaxlaravel

解决方案


试试这个:

success: function (response) {
  response = JSON.parse(response);
  let qty = response.qty;
}

推荐阅读