簡體   English   中英

Angular / Laravel-從mysql數據庫輸出json數據

[英]Angular/Laravel - outputting json data from mysql database

我正在獲取數據,我想使用laravel查詢生成器從mysql輸出並將其轉換為JSON格式,如w3Schools建議的W3schools SQL鏈接 ,然后在AngularJS幫助下打印獲取的mysql數據,但它似乎根本沒有做任何事情它顯示了一個空白頁。

Laravel路線

Route::get('/' ,  [
    'as' => 'homepage',
    'uses' => 'indexController@main'
]);

索引控制器

class IndexController extends Controller
{
    public function main(){
      $data =  json_encode(array('user_posts' =>\DB::table('posts')
                ->orderBy('added_on', 'desc')
                ->get()));

    return view('index', ['posts' => $data]);
    }

}

使用AngularJS控制器的index.php視圖

<head>

            <!--Angulare -->
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js"></script>
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-route.js"></script>
            <!--Applicazione -->
            <script src="js/app.js"></script>
            <script src="js/controller/PoolController.js"></script>
            <script src="js/service/poolService.js"></script>
            <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    </head>

    <body>
      <div ng-app="myApp" ng-controller="customersCtrl">

      <table>
        <tr ng-repeat="x in names">
          <td>{{ x.username }}</td>
          <td>{{ x.age }}</td>
        </tr>
      </table>

      </div>





   ### Angular Module and controller ###
      <script>
      var app = angular.module('myApp', []);
      app.controller('customersCtrl', function($scope, $http) {
          $http.get("/")
          .then(function (response) {$scope.names = response.data.user_posts;
          });
      });
      </script>
    </body>

Json輸出如下所示:

{"user_posts":[{"id":1,"username":"Moly","age":22,"added_on":"2017-01-05 08:51:18"},
{"id":2,"username":"katja","age":22,"added_on":"2017-01-05 08:51:18"},
{"id":3,"username":"rumanova","age":22,"added_on":"2017-01-05 08:51:18"}]}

到目前為止,我已經在AngularJS控制器中嘗試過:

改變:

 $http.get("/")

 $http.get("homepage")

也嘗試改變

response.data.user_posts

response.data.posts

基本上,我有點迷茫,似乎無法理解,我在做什么錯。 提前致謝

您總是返回一個渲染的視圖,該視圖永遠不會是有效的JSON響應。 相反,請檢查它是否是一個ajax請求。 而且,Laravel提供了collection() ,應該使用它來支持原始數組或json編碼,並盡可能提供堆棧內聚。 嘗試這個:

if ($request->ajax()) {
    return response()->json(collect(['user_posts' =>\DB::table('posts')
        ->orderBy('added_on', 'desc')
    ]));
}

return view('index);

另外,請確保將$request注入控制器的方法中:

public function main(Request $request) {

此外, Angular對Laravel的路線一無所知,但這沒關系。 如果您直接在視圖文件內部使用腳本,那么您仍然可以訪問Laravel的助手,可以發出端點請求:

$http.get('{{route('homepage')}}')

否則,如果您的Angular在腳本中,請執行以下操作:

$http.get('/');

然后,您將在HTTP請求回調中使用response.user_posts訪問它。

您可以這樣使用$ routeProvider而不是$ html:

app.config(['$routeProvider', function($routeProvider) {

    $routeProvider.
    when('/homepage', {
        templateUrl: '/homepage.html',
        controller: 'customersCtrl'
      });

}]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM