Hướng dẫn PHP Ajax với ví dụ

⚡ Tóm tắt thông minh

Ajax trong PHP cho phép trang web trao đổi một lượng nhỏ dữ liệu với máy chủ và cập nhật một phần trang mà không cần tải lại toàn bộ. Hướng dẫn này xây dựng một công cụ tìm kiếm trực tiếp, giải thích cách tiếp cận XMLHttpRequest cổ điển và giải pháp thay thế Fetch API hiện đại.

  • 🔄 Ajax là gì: Ajax, Bất đồng bộ JavaSử dụng mã lệnh và XML để cập nhật một phần trang bằng cách trao đổi dữ liệu với máy chủ mà không cần làm mới toàn bộ trang.
  • Tại sao nên sử dụng: Ajax cung cấp các tính năng phong phú, tương tự như trên máy tính để bàn, chẳng hạn như tự động điền, xác thực trực tiếp và menu thả xuống phụ thuộc.
  • 🖥️ Máy khách và máy chủ: JavaĐoạn mã này chạy trong trình duyệt và gọi một đoạn mã PHP, đoạn mã này sẽ trả về chỉ những dữ liệu cần thiết để cập nhật trang.
  • 🔍 Tìm kiếm trực tiếp: Trình xử lý sự kiện onkeyup sẽ gửi mỗi lần nhấn phím đến một tập lệnh PHP, tập lệnh này sẽ trả về ngay lập tức các tên framework phù hợp.
  • 📜 XMLHttpRequest: Phương pháp truyền thống tạo ra một đối tượng XMLHttpRequest và đọc responseText khi yêu cầu hoàn tất.
  • 🆕 API Fetch: Mã nguồn hiện đại thay thế XMLHttpRequest bằng hàm fetch dựa trên promise để tạo ra các yêu cầu gọn gàng và dễ đọc hơn.
  • 🤖 Hỗ trợ AI: Các công cụ AI có thể chuyển đổi mã XMLHttpRequest cũ thành fetch hoặc axios và giúp gỡ lỗi các yêu cầu Ajax bị lỗi.

PHP Ajax

Ajax là gì?

AJAX viết tắt của Asynchronous (bất đồng bộ) JavaScript & XML. Đây là một công nghệ giúp giảm thiểu sự tương tác giữa máy chủ và máy khách. Nó thực hiện điều này bằng cách chỉ cập nhật một phần của trang web thay vì toàn bộ trang. Các tương tác bất đồng bộ được khởi tạo bởi JavaĐoạn mã. Mục đích của AJAX là trao đổi một lượng nhỏ dữ liệu với máy chủ mà không cần làm mới trang.

JavaScript là một ngôn ngữ kịch bản phía máy khách. Nó được thực thi ở phía máy khách bởi các trình duyệt web hỗ trợ JavaKịch bản. JavaMã lệnh chỉ hoạt động trong các trình duyệt có JavaĐã bật tập lệnh.

XML XML là viết tắt của Extensible Markup Language (Ngôn ngữ đánh dấu mở rộng). Nó được sử dụng để mã hóa thông điệp ở cả định dạng con người và máy tính. Nó giống như HTML nhưng cho phép bạn tạo các thẻ tùy chỉnh của riêng mình. Để biết thêm chi tiết về XML, hãy xem bài viết về... XML.

Tại sao nên sử dụng AJAX?

  • Nó cho phép phát triểnping Các ứng dụng web phong phú, tương tác cao, giống như các ứng dụng máy tính để bàn.
  • Việc xác thực có thể được thực hiện khi người dùng điền vào biểu mẫu mà không cần gửi đi. Điều này có thể đạt được bằng cách sử dụng tính năng tự động hoàn thành. Các từ mà người dùng nhập vào sẽ được gửi đến máy chủ để xử lý, và máy chủ sẽ phản hồi bằng các từ khóa khớp với những gì người dùng đã nhập.
  • Nó có thể được sử dụng để điền dữ liệu vào hộp thả xuống tùy thuộc vào giá trị của một hộp thả xuống khác.
  • Dữ liệu có thể được truy xuất từ ​​máy chủ và chỉ một phần nhất định của trang được cập nhật mà không cần tải toàn bộ trang. Điều này rất hữu ích cho các phần của trang web cần tải những thứ như:
    • Tweets
    • Nhận xét
    • Số người dùng truy cập trang web và các dữ liệu trực tiếp tương tự.

Cách tạo ứng dụng PHP Ajax

Chúng tôi sẽ tạo một ứng dụng đơn giản cho phép người dùng tìm kiếm các khung công tác PHP MVC phổ biến.

Ứng dụng của chúng tôi sẽ có một hộp văn bản để người dùng nhập tên các framework.

Sau đó, chúng ta sẽ sử dụng AJAX để tìm kiếm kết quả phù hợp, rồi hiển thị tên đầy đủ của framework ngay bên dưới ô tìm kiếm.

Bước 1) Tạo trang chỉ mục

index.php

<html>

<head>

<title>PHP MVC Frameworks - Search Engine</title>

<script type="text/javascript" src="auto_complete.js"></script>

</head>

<body>

<h2>PHP MVC Frameworks - Search Engine</h2>

<p><b>Type the first letter of the PHP MVC Framework</b></p>

<form method="POST" action="index.php">

<p><input type="text" size="40" id="txtHint" onkeyup="showName(this.value)"></p>

</form>

<p>Matches: <span id="txtName"></span></p>

</body>

</html>

ĐÂY,

  • “onkeyup=”showName(this.value)”” thực thi JavaHàm script showName sẽ hiển thị tên mỗi khi người dùng nhập một phím vào ô văn bản. Tính năng này được gọi là tự động hoàn thành.

Bước 2) Tạo trang khung

framework.php

<?php

$frameworks = array("CodeIgniter","Zend Framework","Cake PHP","Kohana") ;

$name = $_GET["name"];

if (strlen($name) > 0) {

$match = "";

for ($i = 0; $i < count($frameworks); $i++) {

if (strtolower($name) == strtolower(substr($frameworks[$i], 0, strlen($name)))) {

if ($match == "") {

$match = $frameworks[$i];

} else {

$match = $match . " , " . $frameworks[$i];

}

}

}

}

echo ($match == "") ? 'no match found' : $match;

?>

Bước 3) Tạo tập lệnh JS

auto_complete.js

function showName(str){

if (str.length == 0){ // exit function if nothing has been typed in the textbox

document.getElementById("txtName").innerHTML=""; // clear previous results

return;

}

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

} else {// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200){

document.getElementById("txtName").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","frameworks.php?name="+str,true);

xmlhttp.send();

}

ĐÂY,

  • Câu lệnh “if (str.length == 0)” kiểm tra độ dài của chuỗi. Nếu độ dài bằng 0, thì phần còn lại của kịch bản sẽ không được thực thi.
  • “if (window.XMLHttpRequest)…” Các phiên bản Internet Explorer 5 và 6 sử dụng ActiveXObject để triển khai AJAX. Các phiên bản và trình duyệt khác như Chrome và Firefox Sử dụng XMLHttpRequest. Đoạn mã này đảm bảo ứng dụng của chúng ta hoạt động trên cả IE 5 & 6 và các trình duyệt hiện đại.
  • “xmlhttp.onreadystatechange=function…” kiểm tra xem tương tác AJAX đã hoàn tất và trạng thái là 200 hay chưa, sau đó cập nhật span txtName với kết quả trả về.

Bước 4) Kiểm tra ứng dụng PHP Ajax của chúng tôi

Giả sử bạn đã lưu tệp index.php trong thư mục phptuts/ajax, hãy truy cập vào đường dẫn sau: URL http://localhost/phptuts/ajax/index.php

Kiểm tra ứng dụng PHP Ajax của chúng tôi

Nhập chữ C vào ô văn bản. Bạn sẽ nhận được kết quả sau.

Kiểm tra ứng dụng PHP Ajax của chúng tôi

Ví dụ trên minh họa khái niệm AJAX và cách nó có thể giúp chúng ta tạo ra các ứng dụng tương tác phong phú.

AJAX hiện đại với Fetch API

Đối tượng XMLHttpRequest ở trên vẫn hoạt động, nhưng nhánh ActiveXObject của nó dành cho các phiên bản Internet Explorer cũ không còn cần thiết nữa. Các trình duyệt hiện đại cung cấp API Fetch dựa trên Promise, thực hiện cùng một yêu cầu với ít mã hơn nhiều.

function showName(str) {
    if (str.length === 0) {
        document.getElementById("txtName").innerHTML = "";
        return;
    }
    fetch("frameworks.php?name=" + encodeURIComponent(str))
        .then(response => response.text())
        .then(text => {
            document.getElementById("txtName").innerHTML = text;
        });
}

Phiên bản này thực hiện cùng một công việc: nó gửi văn bản đã nhập đến frameworks.php và đặt phản hồi vào thẻ span txtName. Nó cũng sử dụng encodeURIComponent để mã hóa an toàn dữ liệu đầu vào, và chuỗi promise của nó dễ dàng mở rộng với việc xử lý lỗi bằng cách sử dụng khối catch.

Câu Hỏi Thường Gặp

Yêu cầu đồng bộ sẽ chặn trình duyệt cho đến khi máy chủ phản hồi, làm đóng băng trang. Yêu cầu bất đồng bộ chạy ngầm, do đó trang vẫn phản hồi nhanh và cập nhật khi dữ liệu đến. Ajax sử dụng mô hình bất đồng bộ.

Với fetch, truyền đối số thứ hai là phương thức thiết lập cho POST và phần thân, sau đó đọc biến $_POST trong PHP. Với XMLHttpRequest, gọi open('POST', url), thiết lập tiêu đề Content-Type và gửi dữ liệu đã mã hóa.

CORS (Cross-Origin Resource Sharing) chặn các yêu cầu của trình duyệt đến một tên miền khác trừ khi máy chủ đó gửi đúng tiêu đề Access-Control-Allow-Origin. Thêm tiêu đề này ở phía PHP hoặc gọi hàm cùng nguồn gốc. URL để sửa chữa nó.

Vâng. Hãy dán đoạn mã XMLHttpRequest vào, và AI có thể viết lại nó bằng cách sử dụng API tìm nạp dựa trên Promise hoặc Axios, thêm xử lý lỗi và giữ nguyên hành vi. Hãy kiểm tra kết quả, vì cách xử lý phản hồi có một chút khác biệt.

Đúng vậy. Hãy chia sẻ mã yêu cầu và thông báo lỗi trên bảng điều khiển trình duyệt hoặc lỗi mạng, và AI có thể phát hiện ra lỗi. URLNếu đó là lỗi chặn CORS, thiếu tham số hoặc lỗi máy chủ, hãy đề xuất cách khắc phục để thử.

Tóm tắt bài viết này với: