Lợi thế của Javascript (Js) thực sự nổi bật đó là việc tạo, cập nhật, thay đổi, sửa xoá dữ liệu cục bộ mà không phải load lại toàn bộ trang web. Nhưng để đạt được việc đó thì phải cần thời gian cho Javascript tiến hoá. Và hôm nay ta sẽ đi tìm hiểu quá trình này nhé. AJAXTrong thời gian xa xưa xây dựng website thì công nghệ sử dụng dựa hoàn toàn vào HTML và mỗi thao tác từ người dùng thì đều phải tải lại trang từ trang chủ. Điều này làm trang web hoạt động kém hiệu quả và trải nghiệm không tốt đối với người dùng làm quá tải máy chủ, tăng băng thông truyền tải, lãng phí tài nguyên. Vì thế cần phải có một công nghệ nào đó cải thiện việc này. Và AJAX đã ra đời để bù đắp những nhược điểm của web truyền thống. Cái tên Ajax đã được cha đẻ của nó là ông Jesse James Garrett đưa ra và sử dụng lần đầu vào năm 2005. Cùng tìm hiểu sâu hơn vào công nghệ này thì
nó không phải là ngôn ngữ lập trình mà là kết hợp các công nghệ với nhau và điểm khác biệt cơ bản với cách truyền thống là với công nghệ này thì nó xử lý thông tin trên máy khách (client) thay vì máy chủ (server) vừa giúp giảm tải cho server lại vừa tăng trải nghiệm của người dùng. Cụ thể thì nhờ vào việc hoạt động bất đồng bộ asynchronous để xử lý nhiều yêu cầu cùng một lúc dựa vào Javascript, HTML DOM (để hiển thị hoặc sử dụng dữ liệu) và dùng XML để chứa dữ liệu trong quá trình trao đổi nhận và gửi dữ liệu từ trình duyệt web tới máy chủ. Cụ thể hơn thì ta có hình minh hoạ bên dưới So sánh web truyền thống và ajax Qua hình ta có thể thấy khác biệt rõ ràng là với cách truyền thống thì với mỗi request từ trình duyệt (client) thì máy chủ phải gửi cả html, css, data cho trình duyệt tải lại trang và hiển thị cho người dùng.Còn với AJAX thì hai bên trình duyệt vào máy chủ chỉ trao đổi XML data còn lại việc hiển thị lại html, css thì do AJAX đảm nhiệm và hiển nhiên việc này giảm tải cho máy chủ và tiết kiệm băng thông đồng thời tăng trải nghiệm cho người dùng giúp họ thấy việc tương tác với trang web nhanh hơn…
Bây giờ ta đi sâu hơn vào cách hoạt động của AJAX và sau đó sẽ tìm hiểu ví dụ qua code cụ thể sau. Mô tả cụ thể hơn cách AJAX hoạt động Cụ thể hơn cách AJAX hoạt động
Giải thích từ ngữ XMLHttPRequestXMLHttpRequest (XHR) là một hàm khởi tạo có sẵn của trình duyệt dùng để giao tiếp với server. XHR cũng là một Web APIs nên nó chỉ có trên môi trường trình duyệt, không có ở Nodejs Tạo một XMLHttpRequest với cú pháp
Một số phương thức của XMLHttpRequest như sau
Một số thuộc tính của XMLHttpRequest
Ví dụ XMLHttpRequestGETCùng xem ví dụ dùng XHR để GET request
Kết quả trả về là
{ "args": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.9,vi;q=0.8", "Host": "httpbin.org", "Origin": "https://cdpn.io", "Referer": "https://cdpn.io/", "Sec-Ch-Ua": "\"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"", "Sec-Ch-Ua-Mobile": "?0", "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "cross-site", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-60ab2c7e-3c7440b55b69b1dd1eebd0a1" }, "origin": "113.161.70.139", "url": "https://httpbin.org/get" } POST
Kết quả trả về là
{ "args": {}, "data": "{\"name\":\"doidev\",\"skill\":\"ch\u00e9m gi\u00f3\",\"point\":100}", "files": {}, "form": {}, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.9,vi;q=0.8", "Content-Length": "50", "Content-Type": "text/plain;charset=UTF-8", "Host": "httpbin.org", "Origin": "https://cdpn.io", "Referer": "https://cdpn.io/", "Sec-Ch-Ua": "\"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"", "Sec-Ch-Ua-Mobile": "?0", "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "cross-site", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-60ab2e24-3340d7973486ab194e6206bf" }, "json": { "name": "doidev", "point": 100, "skill": "ch\u00e9m gi\u00f3" }, "origin": "113.161.70.139", "url": "https://httpbin.org/post" } Cách dùng AJAXDùng XMLHttpRequestĐây là cách dùng cổ xưa nhất và rườm rà nhất Dùng JqueryCách dùng qua thư viện jQuery cung cấp cho ta nhiều phương thức tiện lợi như load, ajax, get, getJSON Dùng FetchApiFetch API là một cách mà trình duyệt cung cấp, nó nằm mặc định trong trình duyệt và ta chỉ việc sử dụng với nhiều tính năng nâng cao và dễ sử dụng hơn XMLHttpRequest Dùng axiosAxios, phổ biến nhất, nó là một thư viện chuyên dụng cho việc xử lý AJAX cũng như gọi API. Cung cấp hàng tá tính năng hay, dùng được cho cả môi trường trình duyệt và Node (nếu trình duyệt nó sẽ dựa trên XHR, nếu là Node thì là HTTP interface) FETCH APIFetch là một API đơn giản cung cấp cho chúng ta khả năng gửi và nhận request thông qua trình duyệt. Nếu như XMLHttpRequest dùng callback thì Fetch API dùng Promise vì thế sẽ tiện lợi hơn khi thao tác và xử lý. Với Fetch API thì dữ liệu dùng ở đây là dạng JSON và ta cùng đi tìm hiểu về nó một chút. JSONJSON (JavaScript Object Notation) là một chuỗi text được viết dưới dạng Javascript Object dùng để lưu trữ và trao đổi dữ liệu. JSON thường được dùng để lưu trữ string, number, boolean, array, object, null. Định dạng JSON có thể dễ dàng sử dụng ở các ngôn ngữ lập trình khác nhau. Ở Javascript bạn có thể thao tác với JSON thông qua JSON.parse() và JSON.stringify() Cú pháp JSON
Loại dữ liệuTrong JSON thì dữ liệu phải là một trong những loại
Chuyển Object thành JSON
Chuyển JSON thành Object
Sử dụng Fetch APISetupMột setup request được thiết lập đơn giản
Đọc một response
Mặc định nếu không truyền tham số thứ 2 thì fetch sẽ dùng phương thức GET, còn muốn chỉ rõ phương thức như POST, PUT… thì phải truyền tham số thứ 2 vào. Ví dụ POST
Bài này chém cơ bản về AJAX và fetch API, hi vọng qua đó thì ta có một cái hiểu sơ bộ và từ từ tiếp tục tìm hiểu sâu hơn |