Trong bài này, chúng ta sẽ sử dụng backend PHP, front-end là Javascript thuần và HTML/CSS. Bạn sẽ lấy dữ liệu mà không cần phải reload lại trang web của mình.
Lấy dữ liệu với PHP
Để viết một hàm trong PHP để truy vấn cơ sở dữ liệu và trả về kết quả dưới dạng JSON, bạn có thể sử dụng các bước sau:
- Kết nối đến cơ sở dữ liệu bằng cách sử dụng hàm
mysqli_connect()hoặc hàmPDO::__construct(). - Thực hiện truy vấn SQL bằng cách sử dụng hàm
mysqli_query()hoặc hàmPDOStatement::execute(). - Lấy kết quả truy vấn bằng cách sử dụng hàm
mysqli_fetch_assoc()hoặc hàmPDO Statement::fetch(). - Chuyển kết quả thành dạng JSON bằng cách sử dụng hàm
json_encode().
Tạo file get_users.php với nội dung như dưới đây:
function get_users() {
// Kết nối đến cơ sở dữ liệu
$conn = mysqli_connect("localhost", "username", "password", "database");
// Thực hiện truy vấn
$result = mysqli_query($conn, "SELECT username, email FROM user");
// Lấy kết quả
$users = array();
while ($row = mysqli_fetch_assoc($result)) {
$users[] = $row;
}
// Chuyển kết quả thành dạng JSON và trả về
return json_encode($users);
}
Chú ý với ví dụ này, bạn cần có cơ sở dữ liệu bephong trong MySQL server của bạn, với bảng user như sau:
- username: primary key, varchar(255)
- email: unique, varchar(255)
Tạo giao diện và lấy dữ liệu
Viết một trang HTML với button “Get Users” và hiển thị danh sách người dùng tìm được dưới dạng bảng HTML, bạn có thể sử dụng các bước sau:
- Tạo một button HTML với sự kiện
onclick. - Trong sự kiện
onclick, sử dụng hàmfetch()để gọi đến hàmget_users()của PHP. - Trong hàm
then()củafetch(), sử dụng hàmjson()để parse kết quả trả về từ hàmget_users()thành đối tượng JavaScript. - Tạo một bảng HTML và hiển thị danh sách người dùng tìm được trong bảng.
File users.html sẽ có đoạn code tương tự như sau (chú ý đặt file html này cùng thư mục với get_users.php):
<button onclick="get_users()">Get Users</button>
<table id="user-table"></table>
<script>
function get_users() {
fetch("get_users.php")
.then(response => response.json())
.then(users => {
// Lấy bảng
var table = document.getElementById("user-table");
// Xóa các dòng cũ trong bảng
table.innerHTML = "";
// Thêm các dòng mới vào bảng.
for (var i = 0; i < users.length; i++)
{
var row = table.insertRow(-1);
var usernameCell = row.insertCell(0);
var emailCell = row.insertCell(1);
usernameCell.innerHTML = users[i].username;
emailCell.innerHTML = users[i].email;
}
});
}
</script>
Bạn có thể đọc thêm về hàm fetch của Javascript tại đây.
Dùng Laravel làm backend
Bạn cũng có thể dùng Laravel để tạo action get_users và trả lại thông tin của user ở dạng json.
Để viết lại hàm get_users() của PHP bằng framework Laravel, bạn có thể sử dụng các bước sau:
- Tạo một model cho bảng
userbằng cách sử dụng lệnhphp artisan make:model User. - Tạo một controller cho hàm
get_users()bằng cách sử dụng lệnhphp artisan make:controller UserController. - Trong controller, viết hàm
get_users()để truy vấn dữ liệu từ bảngusersvà trả về kết quả dưới dạng JSON.
Ví dụ:
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
class UserController extends Controller {
public function get_users() {
$users = User::select('username', 'email')->get();
return response()->json($users);
}
}
Để sử dụng hàm fetch() để gọi đến hàm get_users() trong UserController bằng PHP, bạn có thể sử dụng các bước sau:
- Thêm một route cho hàm
get_users()trong fileroutes/web.php. - Trong hàm
fetch(), truyền vào đường dẫn tới route của hàmget_users().
// routes/web.php
Route::get('/get-users', 'UserController@get_users');
// JavaScript users.html
fetch("/get-users")
.then(response => response.json())
.then(users => { // Xử lý kết quả như code ở mục trước });
Sử dụng Yii2
- Tạo một model cho bảng
userbằng cách sử dụng lệnhphp yii make:model User. - Tạo một controller cho hàm action
get_users()bằng cách sử dụng lệnhphp yii make:controller UserController. - Trong controller, viết hàm
get_users()để truy vấn dữ liệu từ bảnguservà trả về kết quả dưới dạng JSON.
Controller:
<?php
namespace app\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController {
public $modelClass = 'app\models\User';
public function actionGetUsers() {
$users = $this->modelClass::find()->select(['username', 'email'])->asArray()->all();
response()->json($users);
}
}
// config/web.php
'rules' => [
...
['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
]
Update cách gọi action GetUsers của Yii2 ở trong trang users.html như sau:
fetch('/users/get-users')
.then(response => response.json())
.then(users => {
// do something with the users
});
Kết luận
Trong bài này bạn đã học cách sử dụng fetch trong javascript. Bạn có thể áp dụng nó trong MVC web app. Tuy nhiên, nếu bạn cần xây dựng frontend javascript để tương tác với dữ liệu qua Web Service API, bạn nên xem xét việc dùng các framework như ReactJS hay VueJS.
Học cách sử dụng ReactJS trong series sau: ReactJS Bài 1: Khởi động dự án với reactjs
