Я получаю сообщение об ошибке «Отсутствуют данные» при использовании Carbon для передачи данных в представление pdf в Laravel. Запрос работает, когда данные возвращаются на ту же страницу с выпадающим списком, но получают ошибку при переходе на другую страницу.
ошибка, которую я получаю
Я использую средство выбора даты в качестве раскрывающегося списка и формат даты, который я использую:
"2020-December"
аякс:
changeMonth:true,
changeYear:true,
showButtonPanel:true,
dateFormat: "yy-MM",
onClose: function(dateText, inst) {
var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
$(this).datepicker('setDate', new Date(year, month, 1));
}
});
$('#convertBtn').click(function() {
var s = document.getElementById("sites");
var site = s.options[s.selectedIndex].text;
var startdate = $('#datepicker-8').val();
if (site != '' && startdate != '' )
{
$.ajax({
paging: false,
searching: false,
processing: true,
retrieve: true,
serverSide: true,
headers: {
'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')
},
url:"{{ route('billing.bill') }}",
type:"GET",
dataType:"json",
data:{
site:site,
startdate:startdate,
},
success:function(data){
alert(JSON.stringify(data));
},
error: function(data){
alert('Error');
}
})
}
else
{
alert("Please select 'Site' & 'Date'. ");
}
});
контроллер
$sites['report_date'] = Carbon::createFromFormat('Y-F', $request->startdate);
$data = DB::table('monthly_data')
->where('site', $request->site)
->whereMonth('report_date', $sites['report_date'])
->whereYear('report_date',$sites['report_date'])
->get();
$pdf = \App::make('dompdf.wrapper');
$pdf -> loadView('pdf',compact('data'));
$pdf -> setPaper('a4','landscape');
return $pdf->stream('report.pdf');
могу ли я узнать, как решить эту ошибку?
@KamleshPaul пытался dd($request->startdate)
выдать ту же ошибку «Отсутствуют данные»
до возникновения ошибки используйте dd()
Используйте dd($request->startdate)
в качестве первой строки в методе контроллера и посмотрите, что вы получаете.
@KamleshPaul @Donkarnash я получаю ноль от dd($request->startdate)
это мой ajax не смог передать данные контроллеру? или это проблема с моим запросом?
да, это проблема, исправьте это и добавьте проверку, чтобы вы не получили ошибку 500
@KamleshPaul я попробовал dd($request) и тоже получил ноль. мне интересно, сделал ли я какую-либо ошибку в своем ajax, и он не может перейти к контроллеру. Это что-то странное, у меня есть одна кнопка фильтра, и я могу использовать тот же запрос, чтобы получить нужные мне данные.
удали эти paging: false, searching: false, processing: true, retrieve: true, serverSide: true,
из ajax
@KamleshPaul удален. он все еще становится нулевым.
решение: сделать некоторые изменения в ajax
data: {
site: site,
startdate: startdate,
},
xhrFields: {
responseType: 'blob' // to avoid binary data being mangled on charset conversion
},
success: function(blob, status, xhr) {
var ieEDGE = navigator.userAgent.match('/Edge/g');
var ie = navigator.userAgent.match('/.NET/g'); // IE 11+
var oldIE = navigator.userAgent.match('/MSIE/g');
if (ie || oldIE || ieEDGE) {
window.navigator.msSaveBlob(blob, fileName);
} else {
var fileURL = URL.createObjectURL(blob);
document.write('<iframe src = "' + fileURL + '" frameborder = "0" style = "border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>');
}
},
error: function(data) {
alert('Error');
}
убери dataType:"json";
и замени на xhrFields: { responseType: 'blob'}
тогда заработает
попробуйте
dd($request->startdate)
и опубликуйте, какой формат вы получаете в контроллере, а также попробуйте добавить проверку