HỌC AJAX CƠ BẢN | ĐÔ TRỊNH

5/5 - (4 votes)

Nếu bạn xác định làm web thì bắt buộc bạn phải biết kỹ thuật Ajax, nó rất quan trọng cho dù bây giờ bạn chưa hiểu được tầm quan trọng của nó thì mình cũng khuyên bạn nên làm được nó. Trong bài viết này mình sẽ giúp bạn hiểu một cách tổng quan nhất về cơ chế Ajax.

Vậy nó hoạt động thế nào? Cần những hàm nào trong jQuery?

1. Ajax là gì?

Ajax là Asynchronous JavaScript and XML một nhóm công nghệ web nó giúp chúng ta load không đồng bộ trên một trang web. Ví dụ khi bạn xem một tin tức thì sẽ thường thấy trạng thái của trình duyệt xoay xoay nhưng có cái ô comment bên dưới khi bạn bình luận thì nó hiện ra ngay, nó không tải lại toàn bộ trang mà chỉ thay đổi tại cái khu vực mà bạn thấy thôi. Đấy đại khái nó là như thế.

Học ajax cơ bản
Học ajax cơ bản (ảnh tham khảo)

2. Học ajax cơ bản

Dưới đây mình sẽ hướng dẫn bạn tạo một ứng dụng ajax đơn giản là khi click vào button VIEW sau 5s thì hiển thị 1 đoạn text lên. Chú ý là các bạn có thể thực hiện việc ajax này bằng javascript thuần (sử dụng các phương thức trong lớp XMLHttpRequest) hoặc sử dụng thư viện jQuery cái mà cũng được viết bằng js. Trong ví dụ này mình cùng các bạn đi thực hiện nó thông qua jQuery. Nếu bạn muốn tìm hểu thêm cách thực hiện bằng js thuần thì xem thêm ở đây https://stackoverflow.com/questions/9713058/send-post-data-using-xmlhttprequest và https://hieusensei.com/ajax-voi-javascript-va-jquery .

Đầu tiên chúng ta include thư việc jQuery, mình gọi như thế này là mặc định nó sẽ include version mới nhất

<script type="text/javascript" src="https://code.jquery.com/jquery-latest.pack.js"></script>

Sau đó thêm đoạn này vào thẻ body:

<div id="ajaxphp-results"></div>
<button id="btn">View</button>

Thẻ dev đầu tiên chúng ta để hiển thị kết quả trang php trả về, button thứ 2 là nút để bạn click

Và bây giờ đến đoạn quan trọng, bạn cho đoan script này vào bên trong thẻ head (trước thẻ body)

<script>
        $(document).ready(function () {
            jQuery("#btn").click(function(){
                var data_test = 'xin chao';
                $.ajax({
                    url: 'controller.php',
                    type: 'POST',
                    data: 'string=' + data_test,
                    success: function (data) {
                        setTimeout(function(){
                            $('#ajaxphp-results').html(data);
                        },5000);
                    },
                    error: function (e) {
                        console.log(e.message);
                    }
                });
            });
        });
</script>

Ở đây chúng ta cần đảm bảo rằng trang của chúng ta đã load hết nên chúng ta đặt code bên trong hàm này

$(document).ready(function () {
           //html element đã sẵn sàng
});

Sau đó chúng ta sẽ tạo một event click chuột vào button view, vậy khi button view được click thì chúng ta sẽ xử lý cái gì?

  • khai báo 1 biến có nội dung là “xin chao”
  • Sử dụng hàm ajax để gửi biến ấy sang cho file php xử lý, trong hàm này cần các tham số như:
  • url: tức là nơi sẽ xử lý dữ liệu.
  • type: chính là phương thức đẩy dữ liệu đi (POST hoặc GET)
  • data: dữ liệu nào sẽ được đẩy sang, ở đây chúng ta đấy biến data_test sang và cần gán nó vào 1 tham số string để sang bên php chúng ta có thể lấy giá trị string bằng cách $_POST[‘string’] nếu type là post còn $_GET[‘string’] với type là get.
  • Hàm success sẽ thực hiện khi chúng ta thực hiện thành công. Ở đây nếu thành công chúng ta hẹn giờ 5s để nó set content cho thẻ có id là #ajaxphp-results
  • Hàm error sẽ thực hiện khi công việc thất bại. ở đây chúng ta đơn giản chỉ console.log ra thôi, cái này bạn phải nhấn F12 mới thấy được.

Đây là code đầy đủ trang html

<html>
<head><title>Basic Ajax Demo</title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-latest.pack.js"></script>
    <script>
        $(document).ready(function () {
            jQuery("#btn").click(function(){
                var data_test = 'xin chao';
                $.ajax({
                    url: 'controller.php',
                    type: 'POST',
                    data: 'string=' + data_test,
                    success: function (data) {
                        setTimeout(function(){
                            $('#ajaxphp-results').html(data);
                        },5000);
                    },
                    error: function (e) {
                        console.log(e.message);
                    }
                });
            });
        });
    </script>
</head>
<body>
<div id="ajaxphp-results"></div>
<button id="btn">View</button>
</body>
</html>

 3. Xử lý php

Còn đây là nội dung file controller.php, file này có nhiệm vụ mã hóa sang dạng json và hiển thị (giống như return đối với hàm) nó ra để cho bên hàm success hoặc error của ajax dễ xử lý.

<?php
echo json_encode($_POST['string']);

Rất đơn giản phải không ạ? Nếu bạn chưa hiểu chỗ nào hãy comment bên dưới chúng ta cùng thảo luận 🙂

Các bài viết không xem thì tiếc:

8 Comments

  1. Mình không rành PHP lắm nên cho mình hỏi là bạn xử lý data gửi lên như thế nào và trả lại gì vậy (kết quả :D)
    • var data_test = 'xin chao'; $.ajax({ url: 'controller.php', type: 'POST', data: 'string=' + data_test, success: function (data) { setTimeout(function(){ $('#ajaxphp-results').html(data); },5000); }, error: function (e) { console.log(e.message); } }); Bạn để ý đoạn "data: 'string=' + data_test,:" ấy mình đang gửi dữ liệu dạng chuỗi cho server, chuỗi ở đây là "xin chao" khi server nhận được rồi thì convert sang dạng dữ liệu mà bạn mong muốn. E.g: json, xml, html... tuỳ mục đích, mình thì hay dùng json.
  2. Ajax là load không đồng bộ. vậy load không đông bộ là gì a ơi, nó khác gì với load đồng bộ. em chưa phân biệt được. mong chỉ bảo
    • Là không load lại toàn bộ tài nguyên của website. Bạn để ý xem khi click vào link nào đó thì nó tải toàn bộ lại trang không? ajax giúp mình load lại 1 diện tích nhỏ. Như vậy nó làm cho nhanh và UX tốt hơn.

Thảo luận

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Xem thêm
Mặc định Centos/RedHat… chặn port 80 truy cập từ internet…
 
 
 
 
Facetime iPhone

Main Menu