Bài 12: Search ajax autocomplete có phân trang
0
Google +0
0
Đăng bởi: TheHalfHeart - Vào ngày: 25-08-2014 - Chuyên mục: jQuery - View: 4580
Download
Đây là bài thứ 12 trong loạt serie ajax toàn tập. Nếu như bạn đã đọc đến bài này thì tôi tin rằng bạn đã nắm vững được ajax jquery rồi, nên để nâng cao hơn xíu hôm nay tôi sẽ hướng dẫn làm chức năng search autocomplete ajax có phân trang.
Search autocomplete là gì? Nếu bạn chưa biết nó là gì thì tôi xin trích dẫn thế này, chắc hẳn bạn đã từng vào một số website có chức năng search và khi bạn nhập nội dung vào nó tự động lấy nội dung và hiển thị cho bạn mà không cần phải reload trang. Đây là chức năng rất thân thiện với người dùng nên nếu áp dụng vào website thì tuyệt cú mèo.
Kết quả của bài này ta có form như hình sau:
1. Xây dựng database
Trước tiên bạn cần tạo một database tên test và chạy nội dung sql bên dưới để tạo bảng và thêm một số data.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; CREATE TABLE IF NOT EXISTS `member` ( INSERT INTO `member` (`id`, `username`, `email`) VALUES |
2. Xây dựng thư viện phân trang
Vì trong bài search autocomplete ajax này tôi có phân trang nên bắt buộc phải xây dựng lớp phân trang rồi :D. Bạn tạo file pagination.phpvà copy nội dung bên dưới vào:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
class Pagination { protected $_config = array( $this->_config['total_page'] = ceil($this->_config['total_record'] / $this->_config['limit']); if (!$this->_config['total_page']) { if ($this->_config['current_page'] < 1) { if ($this->_config['current_page'] > $this->_config['total_page']) { $this->_config['start'] = ($this->_config['current_page'] - 1) * $this->_config['limit']; $middle = ceil($this->_config['range'] / 2); if ($this->_config['total_page'] < $this->_config['range']) { $this->_config['max'] = $this->_config['current_page'] + $middle - 1; if ($this->_config['min'] < 1) { else if ($this->_config['max'] > $this->_config['total_page']) { function html() { // Nút prev và first // lặp trong khoảng cách giữa min và max để hiển thị các nút // Nút last và next |
Nếu bạn chưa biết cách viết thư viện phân trang thì có thể tham khảo hai bài sau:
3. Xây dựng model xử lý database
Để cho tiện lợi trong quá trình xử lý database để search autocomplete thì tôi sẽ xây dựng một file chuyên dùng để lấy danh sách và truy vấn theo tham số search truyền vào. Bạn tạo file database.php và copy nội dung bên dưới vào.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
// Khai báo biến toàn cục kết nối // Hàm kết nối database // Hàm đóng kết nối // Hàm đếm tổng số thành viên // Lấy danh sách thành viên |
Trong file tôi đã comment rất kỹ rồi nên ko giải thích gì thêm
4. Xây dựng hàm lấy danh sách search autocomplete và trả về chuỗi JSON
Bạn tạo file get_data.php và copy nội dung sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// Require Lib // Lấy thong tin lọc // Lấy trang hiện tại // Khởi tạo đối tượng Pagination mới // Kết nối db // Cấu hình thông số phân trang // Lấy limit và Start // Lấy danh sách người dùng // Ngắt kết nối // Trả kết quả cho client |
Các bạn lưu ý là tôi trả về kết quả là chuỗi JSON nên ở file xử lý ajax ta phải truyền dataType là JSON nhé.
5. Xây dựng trang hiển thị danh sách và search autocomplete
Bạn tạo file index.php và copy nội dung sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<!DOCTYPE html> html += '</table>'; |
Trong file này thẻ div#content dùng để gán data vào, và tôi đã sử dụng hàm html() jquery để gán.
Trong đoạn ajax tôi có định nghĩa một hàm search dùng để gửi ajax và tôi cũng có gán 2 sự kiện khi keyUp vào ô search và khi click vào phân trang. Trong phần comment tôi đã trình bày rõ ràng rồi nên tôi cũng ko nói gì thêm nữa nhé.
6. Lời kết
Trong bài này quan trọng nhất là đoạn code xử lý jquery ajax search autocomplete, các bạn cố gắng gõ và làm theo nhé, copy nhưng cũng phải hiểu thì mới học tốt được. Còn một vấn đề tôi không trình bày, đó là khi ta nhập từ search nó gửi rất nhiều request, mỗi ký tự một request nên không được hay lắm, để giải quyết vấn đề này ta sẽ xây dựng hệ thống timer, nghĩa là khi người dùng dừng không gõ chừng 0.5 giây ta mới gửi, như vậy sẽ giảm được số request gửi lên server. Vấn đề này ta sẽ học ở bài tiếp they delay keyup event.
0 nhận xét:
Đăng nhận xét