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 






 
 
 
 Bài đăng
Bài đăng
 
 
0 nhận xét:
Đăng nhận xét