#ajax #laravel
Вопрос:
я пытаюсь передать ajax-ответ своему представлению и использовать его в качестве переменной для каждого,мне нужно, чтобы он обновлял количество велосипедов, доступных в даты, выбранные пользователем.Процедура, которую я использую, такова: я беру выбранные данные в календаре, передаю их через ajax своему контроллеру с контроллера, я выполняю запросы к базе данных и возвращаю ajax json с данными.
данные 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]);
}
}
}
Ответ №1:
Попробуй это:
success: function (response) {
response = JSON.parse(response);
let qty = response.qty;
}
Комментарии:
1. Я уже пробовал это решение, но я не могу выполнить foreach для переменной, которая еще не была создана, в этом случае $ qty еще не имеет значения, оно должно принимать значение ajax после вызова
2. Что вы имеете в виду, говоря, что он не был создан? Ваш ajax вызывает функцию контроллера, которая возвращает количество долларов.
3. извините, я все еще на ранней стадии, на самом деле он возвращает json
4. Да, контроллер возвращает данные в формате JSON, именно это и должно произойти. Затем вы используете JS для анализа JSON и обновления HTML-кода с помощью данных.
5. если я использую ваш код, я получаю ошибку : Неперехваченная синтаксическая ошибка: идентификатор «ответ» уже объявлен