2017-02-22 2 views
0

Im normalen PHP, ich kann AJAX tun und die Seite mit setInterval wie folgt aktualisieren:vorgehensweise AJAX mit setInterval in Laravel 5.4

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); 

In Laravel 5.4, weiß ich nicht mehr, wie das geht. Mit Controllern und Ansichten scheint die Weitergabe von Daten kompliziert.

Ich habe in meinen Controller folgendes versuchte dabei:

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); 
}); 

Routen

Route::get('/fetch-data', '[email protected]'); 

Ich dachte, dass durch url: "/fetch-data" von $.ajax Aufruf wird spucke die JSON-Daten als Antwort aus, aber stattdessen zeigt sie mir den w Loch HTML-Seite, die nicht das ist, was ich will.

Zum einfachen Weiterleiten und Weiterleiten von Daten zur Ansicht, ist es in Ordnung. aber die Ansicht alle paar Sekunden aktualisieren, um den Inhalt zu aktualisieren, ohne die Seite zu aktualisieren ... es scheint sehr kompliziert zu sein.

Alle Ideen, wie ich dies in Laravel 5.4 implementieren kann, werden sehr geschätzt.

+1

Sie Json Antwort zurück nehme nicht an Rückkehr Rückkehr Antwort anzuzeigen() -> json (array ('json '=> $ results_array [])) – Surace

Antwort

0

Sie sind fast da; nur Sie es das falsche Format zurückgeben:

statt

return view('page',['json'=>$json]); 

tun

return response()->json($results_array); 
+0

mit 'return response() -> json ($ results_array);' das Ergebnis wird auf der Seite angezeigt, aber nicht von der Erfolgsmethode der Ajax-Anfrage. – anagnam

+0

dann navigieren Sie zu der URL, und nicht mit Ajax – zedling

+1

aufrufen, ja Sie haben Recht. wie dumm von mir ;-) – anagnam