Поэтому я добавляю daterangepicker с Ajax в свой проект Laravel, на моем лезвии у меня есть daterangepicker, похожий на календарь, для выбора даты, а также для обновления и фильтрации. Теперь, когда я нажимаю «Обновить», он обновляет текущую выбранную дату, но когда я фильтрую, ничего не происходит. Когда я Проверьте элемент в моем браузере Safari, он показывает мне: Не удалось загрузить ресурс: сервер ответил со статусом 500 (внутренняя ошибка сервера).
Вот мой DateRangeController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use App\Post;
use Auth;
class DateRangeController extends Controller
{
public function index()
{
$posts = Post::where('user_id', Auth::id());
return view('daterange')->with('posts', $posts);
}
public function fetch_data(Request $request)
{
if ($request->ajax())
{
if ($request->from_date != '' && $request->to_date != '')
{
$data = DB::table('posts')
->whereBetween('date', array($request->from_date, $request->to_date))
->get();
}
else
{
$data = DB::table('posts')->orderBy('date', 'desc')->get();
}
echo json_encode($data);
}
}
}
?>
Вот мой daterange.blade.php со скриптом
<!DOCTYPE html>
<html>
<head>
<title>Date Range Fiter Data in Laravel using Ajax</title>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.css" />
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.js"></script>
</head>
<body>
<br />
<div class = "container box">
<h3 align = "center">Date Range Fiter Data in Laravel using Ajax</h3><br />
<div class = "panel panel-default">
<div class = "panel-heading">
<div class = "row">
<div class = "col-md-5">Sample Data - Total Records - <b><span id = "total_records"></span></b></div>
<div class = "col-md-5">
<div class = "input-group input-daterange">
<input type = "text" name = "from_date" id = "from_date" readonly class = "form-control" />
<div class = "input-group-addon">to</div>
<input type = "text" name = "to_date" id = "to_date" readonly class = "form-control" />
</div>
</div>
<div class = "col-md-2">
<button type = "button" name = "filter" id = "filter" class = "btn btn-info btn-sm">Filter</button>
<button type = "button" name = "refresh" id = "refresh" class = "btn btn-warning btn-sm">Refresh</button>
</div>
</div>
</div>
<div class = "panel-body">
<div class = "table-responsive">
<table class = "table table-striped table-bordered">
<thead>
<tr>
<th width = "35%">Broj Kesice</th>
<th width = "50%">Ime</th>
<th width = "15%">Broj Telefona</th>
</tr>
</thead>
<tbody>
@foreach($posts as $post)
<tr>
<td>{{$post->br_kesice}}</td>
<td>{{$post->ime}}</td>
<td>{{$post->br_telefona}}</td>
</tr>
@endforeach
</tbody>
</table>
{{ csrf_field() }}
</div>
</div>
</div>
</div>
</body>
</html>
<script>
$(document).ready(function(){
var date = new Date();
$('.input-daterange').datepicker({
todayBtn: 'linked',
format: 'yyyy-mm-dd',
autoclose: true
});
var _token = $('input[name = "_token"]').val();
fetch_data();
function fetch_data(from_date = '', to_date = '')
{
$.ajax({
url:"{{ route('daterange.fetch_data') }}",
method:"POST",
data:{from_date:from_date, to_date:to_date, _token:_token},
dataType:"json",
success:function(data)
{
var output = '';
$('#total_records').text(data.length);
for(var count = 0; count < data.length; count++)
{
output += '<tr>';
output += '<td>' + data[count].post_br_kesice + '</td>';
output += '<td>' + data[count].post_ime + '</td>';
output += '<td>' + data[count].date + '</td></tr>';
}
$('tbody').html(output);
}
})
}
$('#filter').click(function(){
var from_date = $('#from_date').val();
var to_date = $('#to_date').val();
if (from_date != '' && to_date != '')
{
fetch_data(from_date, to_date);
}
else
{
alert('Both Date is required');
}
});
$('#refresh').click(function(){
$('#from_date').val('');
$('#to_date').val('');
fetch_data();
});
});
</script>
А вот мои маршруты для диапазона дат
Route::get('/daterange', 'DateRangeController@index');
Route::post('/daterange/fetch_data', 'DateRangeController@fetch_data')->name('daterange.fetch_data');
Любые решения этой проблемы? Мне нужно показать сообщения за выбранную дату
Каков URL-адрес запроса в сетевых инструментах разработки, когда вы выполняете действие?
Я сделал return json_encode($data); и return response()->json(['type' => 'success', 'data' => $data]);, но ничего не происходит, все остается прежним..
Когда я выполняю действие, оно возвращает мне { "message": "SQLSTATE [42S22]: столбец не найден: 1054 Неизвестная дата столбца в "условии заказа" (SQL: выберите * из posts порядка по date описанию)", "исключение ": "Illuminate\\Database\\QueryException", "file": "/Applications/XAMPP/xamppfiles/htdocs/monokl/vendor/laravel/framework/src/Illuminate/Database/Connection.php", "строка": 664, "трассировка": [ ...
Оуу, я только что исправил это, в запросе URL было указано неизвестная дата столбца, и я исправил это с помощью created_at и его работы. Но теперь проблема в том, что он возвращает мне Undefined в <table> для сообщений
Итак, моя функция в DateRangeController теперь выглядит так: ``` public function fetch_data(Request $request) { if ($request->ajax()) { if ($request->from_date != '' && $request->to_date! = '') { $data = DB::table('posts') ->whereBetween('created_at', array($request->from_date, $request->to_date)) ->get(); } else { $data = DB::table('сообщения')->orderBy('created_at', 'desc')->get(); } вернуть json_encode($data); } } } ``` но сейчас он ничего не возвращает мне, когда я нажимаю фильтр
Добавьте console.info(data) в Success: функция проверьте, есть ли ответ!
Но я думаю, что у меня нет успеха: функция...
В аяксе....





Я исправил все это на created_at, а не на дату, и теперь мой DateRangeController выглядит так:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use App\Post;
use Auth;
class DateRangeController extends Controller
{
public function index()
{
$posts = Post::where('user_id', Auth::id());
return view('daterange')->with('posts', $posts);
}
public function fetch_data(Request $request)
{
if ($request->ajax())
{
if ($request->from_created_at != '' && $request->to_created_at != '')
{
$data = DB::table('posts')
->whereBetween('created_at', array($request->from_created_at, $request->to_created_at))
->get();
}
else
{
$data = DB::table('posts')->orderBy('created_at', 'desc')->get();
}
return json_encode($data);
}
}
}
?>
теперь он возвращает мне все сообщения, но как undefined, а по запросу сетевого URL возвращает мне настоящие, а не undefined. Любые решения?
должно быть if ($request->from_date != '' && $request->to_date != '') как вы отправили данные запроса данных: {from_date:from_date, to_date:to_date, _token:_token} и также измените в запросе в "whereBetween"
да, я изменил его, но когда я меняю, он ничего не показывает мне, когда я выбираю какую-то дату, но когда я обновляю, он показывает мне все 14 сообщений, но он показывает меня как undefined для каждого сообщения-> br_kesice, $post-> ime.. .
Можешь выложить проект на гитхаб?!
я сделаю это через минуту
Пожалуйста, загрузите файл базы данных sql
Как я могу его загрузить, я загрузил весь проект, используя начальную фиксацию в Microsoft Visual и команды github для подтягивания проекта.
Добавьте файл данных sql в файлы проекта, затем добавьте, зафиксируйте и нажмите
php artisan db:seed ?
Проверьте мой новый ответ!
Ваша проблема в функции успеха, вы пытаетесь обработать свойство не найдено, это полный тег скрипта
<script>
var _token = $('input[name = "_token"]').val();
$(document).ready(function(){
var date = new Date();
$('.input-daterange').datepicker({
todayBtn: 'linked',
format: 'yyyy-mm-dd',
autoclose: true
});
//if you leave this ,will load the data if you remove this remove comment from line number 43 to 49 to load data :)
fetch_data();
$('#filter').click(function(){
var from_date = $('#from_date').val();
var to_date = $('#to_date').val();
if (from_date != '' && to_date != '')
{
fetch_data(from_date, to_date);
}
else
{
alert('Both Date is required');
}
});
$('#refresh').click(function(){
$('#from_date').val('');
$('#to_date').val('');
fetch_data();
});
});
function fetch_data(from_date = '', to_date = '')
{
$.ajax({
url:"{{ route('daterange.fetch_data') }}",
method:"POST",
data:{from_date:from_date, to_date:to_date, _token:_token},
dataType:"json",
success:function(data)
{
var output = '';
$('#total_records').text(data.length);
$.each(data,function (key,value) {
console.info(value)
output += '<tr>';
output += '<td>' + value.br_kesice + '</td>';
output += '<td>' + value.ime + '</td>';
output += '<td>' + value.created_at + '</td></tr>';
});
$('tbody').html(output);
}
})
}
</script>
Удалить репозиторий, Удачи тебе с твоим проектом :)
Причина может быть какая угодно, но сначала попробуйте вернуть ответ контроллера, а не эхо:
return json_encode($data);Лучше быreturn response()->json(['type' => 'success', 'data' => $data])