I have made alert system for new order. For that I am refreshing div (in header) in every three seconds using jQuery function like this
setInterval(function() {
$("#notification-rf1").load(location.href " #notification-rf1");
$("#notification-rf2").load(location.href " #notification-rf2");
$("#notification-rf3").load(location.href " #notification-rf3");
}, 3000);
This is working fine on other pages but giving issue on those pages where I am using yajra datatable.
When it refresh after three seconds, then those divs which refreshes (using jQuery in 3 sec) become empty. Means all html inside those divs disappears.
I did some testing and found, if I remove yajra datable's code from controller file then issue get resolves.
Here is the controller code:
if ($request->ajax()) {
$data = blog_category::get();
return Datatables::of($data)
->addIndexColumn()
->addColumn('action', function($row){
$category = "'".$row->category."'";
$data = '<button type="button" onclick="return editblogcategory('.$row->id.','.$category.');" data-bs-toggle="modal" data-bs-target="#editcategory"><i aria-hidden="true"></i></button>
<button data-toggle="tooltip" data-original-title="Delete" onclick="return deleteblogcategory('.$row->id.')"><i ></i></button>';
return $data;
})
->rawColumns(['action'])
->make(true);
}
Any solution?
CodePudding user response:
use seperate method/route for your datatables results.
$request->ajax() will be triggered by $("#notification-rf1").load(location.href " #notification-rf1"); since it's an ajax call too
If you want the janky solution and add another condition to differentiate between yajra calls and other ajax calls, you can use the input draw for example which is sent in every request by yajra.
if ($request->ajax() && $request->draw) {
$data = blog_category::get();
...
}
