Bài 10: Xử lý tiến trình khi làm việc với ajax
0
Google +0
0
Đăng bởi: TheHalfHeart - Vào ngày: 12-08-2014 - Chuyên mục: PHP - View: 4570
Download Demo
Có bao giờ bạn gặp sự cố khi viết một chương trình ajax nào đó mà người dùng click liên tục và hệ thống sẽ gửi ajax liên tục? nếu có thì trong bày này tôi sẽ hướng dẫn bạn một cách có thể khắc phục tình trạng này. Tôi sẽ tạm gọi nó là quản lý tiến trình khi gửi ajax. Và trước khi vào nội dung chính như thường lệ tôi sẽ đề cập đến một vài kiến thức mà tôi có sử dụng trong bản demo gửi ajax này.
Trước tiên bạn xem hai hình sau đây để dễ hình dung về chức năng mà trong bài chúng ta sẽ xây dựng.
Hình ảnh ajax đang loadding
Hình ảnh sau khi load ajax xong
1. Tính toàn cục trong javascript
Tại sao tôi lại gọi là tính toàn cục? tại vì trong javascript nếu bạn bật một tab browser và gõ một đường link vào và chạy lên thì trình duyệt sẽ duyệt qua từng dòng đi từ trên xuống dưới, từ trái qua phải của những đoạn thẻ HTML, nếu gặp JS thì nó sẽ xử lý js và lưu vào bộ nhớ của trình duyệt. Một khi nó lưu rồi thì bạn sẽ hoàn toàn có thể sử dụng nó bất cứ ở đâu, dù trong hàm hay ngoài hàm. Đây chính là một trong những tính chất mà JS không được xếp vào một ngôn ngữ lập trình hướng đối tượng.
2. Hàm always trong jquery ajax
Trong jQuery Ajax sẽ có một trong hai trạng thái là thành công hoặc thất bại và nó cũng có hỗ trợ cho chúng ta hai hàm cấu hình để can thiệp vào đó là success và error. Nhưng đôi lúc ta muốn một đoạn mã nào đó dù thành công hay thất bại đều được chạy thì ta phải lặp lại đó code đó ở cả hàm success và error.
Như vậy sẽ không hay lắm, chính vì điều này query có cung cấp cho chúng ta một hàm với tên là always, hàm này dù kết quả trả về của ajax thế nào đi chăng nữa thì nó vẫn gọi tới và xử lý.
Không chần chừ nữa, ta bắt đầu vào tìm hiểu cách quản lý tiến trình khi xử lý ajax nhé.
3. Tạo trang trả về kết quả chuỗi json để ajax gọi tới
Bạn tạo file data.phpvới nội dung như 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 |
$json = ' // Ngủ 5 giây để test ajax // Xuất json |
Trong file này tôi có khai báo một biến $json, và tôi có dùng hàm sleep để cho server xử lý chậm hơn 5 giây, mục đích là để bên ajax gọi tới nó sẽ ngưng xử lý trong 5 giây để ta có thể kiểm tra được tiến trình. Và cuối cùng tôi echo $json để Ajax có thể nhân chuỗi JSON đó.
4. Tạo file xử lý tiến trình ajax
Bạn tạo file index.html với nội dung như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!DOCTYPE html> |
Trong đoạn mã HTML tôi có tạo một cái div <div id="content"></div> dùng để hiển thị dữ liệu trả về. Bên dưới div#content tôi có một div hiển thị dòng chữ loadding và một button dùng để click gửi ajax. Mục đích của chương trình này là khi click vàobutton thì sẽ gửi ajax lấy data, đồng thời sẽ hiển thị chữ loadding... . Nếu như trong quá trình đang gửi mà ta click tiếp thì sẽ thông báo là đang gửi.
Để làm được thì ta sẽ code js xử lý như sau, bạn sửa lại file index.html với nội dung:
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 |
<!DOCTYPE html> |
Trong phần comment tôi đã giải thích đoạn Ajax xử lý rồi, bạn chỉ lưu ý thêm ở hàm always tôi có sử dụng biến cục bộ ajax_loadding để kiểm soát tiến trình.
Bây giờ chạy chương trình và cảm nhận nhé.
5. Lời kết
Bài này cũng không phải phức tạp gì nhưng thiết nghĩ nếu bạn mới học Ajax thì nó khá quan trọng bởi vì nếu bạn không quản lý tiến trình thì người dùng sẽ click liên tục và ajax sẽ phải gửi liên tục.
Tuy nhiên vẫn còn cách khác là khi click gửi ajax thì ta ẩn luôn button đó hoặc chuyển sang trạng thái disabled để người dùng
0 nhận xét:
Đăng nhận xét