В обычном PHP я могу сделать AJAX и обновить страницу с помощью setInterval
следующим образом:
script.js
setInterval(function(){ $.get( "fetch_json.php", function( data ) { var jsonData = JSON.parse(data); $.each(jsonData, function(itemKey,itemObject){ // update div without refreshing the page } },1000);
fetch_json.php
$results_array = []; $file = new SplFileObject("file.csv"); $file->setFlags(SplFileObject::READ_CSV); foreach ($file as $row) { $results_array[] = $row[0]; $results_array[] = $row[1]; $results_array[] = $row[2]; $results_array[] = $row[3]; } echo json_encode($results_array);
В Laravel 5.4 я больше не знаю, как это сделать. С контроллерами и представлениями передача данных кажется сложной.
Я попытался сделать следующее в моем контроллере:
class PageController extends Controller { public function fetchData() { $results_array = []; $file = new \SplFileObject("file.csv"); $file->setFlags(\SplFileObject::READ_CSV); foreach ($file as $row) { $results_array[] = $row[0]; $results_array[] = $row[1]; $results_array[] = $row[2]; $results_array[] = $row[3]; } $json = json_encode($results_array); return view('page',['json'=>$json]); } }
script.js
$(document).ready(function(){ setInterval(function(){ $.ajax({ url: "/fetch-data", success: function( response ) { // update div } }); },1000); });
Маршруты
Route::get('/fetch-data', 'PageController@fetchData');
Я думал, что, вызывая url: "/fetch-data"
из $.ajax
будет выплевывать данные json как ответ, но вместо этого он показывает мне всю html-страницу, которая не то, что я хочу.
Для простой маршрутизации и передачи данных назад для просмотра, это прекрасно. но обновляя представление каждые пару секунд, чтобы обновить содержимое без обновления страницы … кажется, очень сложно.
Любые идеи о том, как я могу реализовать это в Laravel 5.4, очень ценятся.
Вы почти там; просто вы возвращаете неправильный формат:
вместо
return view('page',['json'=>$json]);
делать
return response()->json($results_array);