Về bản chất, đây là mục đích của AJAX . Trang của bạn tải và bạn thêm một sự kiện vào một phần tử. Khi người dùng làm cho sự kiện được kích hoạt, giả sử bằng cách nhấp vào một cái gì đó, Javascript của bạn sử dụng đối tượng XMLHttpRequest để gửi yêu cầu đến máy chủ.
Sau khi máy chủ phản hồi (có thể là với đầu ra), một hàm / sự kiện Javascript khác cung cấp cho bạn một nơi để làm việc với đầu ra đó, bao gồm việc chỉ cần dán nó vào trang như bất kỳ đoạn HTML nào khác.
Bạn có thể làm điều đó "bằng tay" với Javascript đơn giản hoặc bạn có thể sử dụng jQuery. Tùy thuộc vào quy mô dự án của bạn và tình huống cụ thể, có thể đơn giản hơn nếu chỉ sử dụng Javascript thuần túy.
Javascript thuần túy
Trong ví dụ rất cơ bản này, chúng tôi gửi một yêu cầu myAjax.php
khi người dùng nhấp vào một liên kết. Máy chủ sẽ tạo ra một số nội dung, trong trường hợp này là "hello world!". Chúng tôi sẽ đưa vào phần tử HTML với id output
.
Javascript
function getOutput() {
getRequest(
'myAjax.php',
drawOutput,
drawError
);
return false;
}
function drawError() {
var container = document.getElementById('output');
container.innerHTML = 'Bummer: there was an error!';
}
function drawOutput(responseText) {
var container = document.getElementById('output');
container.innerHTML = responseText;
}
function getRequest(url, success, error) {
var req = false;
try{
req = new XMLHttpRequest();
} catch (e){
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return false;
}
}
}
if (!req) return false;
if (typeof success != 'function') success = function () {};
if (typeof error!= 'function') error = function () {};
req.onreadystatechange = function(){
if(req.readyState == 4) {
return req.status === 200 ?
success(req.responseText) : error(req.status);
}
}
req.open("GET", url, true);
req.send(null);
return req;
}
HTML
<a href="#" onclick="return getOutput();"> test </a>
<div id="output">waiting for action</div>
PHP
<?php
echo 'hello world!';
?>
Hãy dùng thử: http://jsfiddle.net/GRMule/m8CTk/
Với thư viện javascript (jQuery et al)
Có thể cho rằng, đó là rất nhiều mã Javascript. Tất nhiên, bạn có thể rút ngắn điều đó bằng cách thắt chặt các khối hoặc sử dụng các toán tử logic ngắn gọn hơn, nhưng vẫn còn rất nhiều điều xảy ra ở đó. Nếu bạn có kế hoạch thực hiện nhiều việc kiểu này trong dự án của mình, bạn có thể tốt hơn với thư viện javascript.
Sử dụng cùng một HTML và PHP ở trên, đây là toàn bộ tập lệnh của bạn (với jQuery được bao gồm trên trang). Tôi đã thắt chặt mã một chút để phù hợp hơn với phong cách chung của jQuery, nhưng bạn có ý tưởng:
function getOutput() {
$.ajax({
url:'myAjax.php',
complete: function (response) {
$('#output').html(response.responseText);
},
error: function () {
$('#output').html('Bummer: there was an error!');
}
});
return false;
}
Hãy dùng thử: http://jsfiddle.net/GRMule/WQXXT/
Đừng vội sử dụng jQuery: việc thêm bất kỳ thư viện nào vẫn đang thêm hàng trăm hoặc hàng nghìn dòng mã vào dự án của bạn chắc chắn như thể bạn đã viết chúng. Bên trong tệp thư viện jQuery, bạn sẽ tìm thấy mã tương tự như mã trong ví dụ đầu tiên, cộng với nhiều mã khác . Đó có thể là một điều tốt, nó có thể không. Lập kế hoạch và xem xét quy mô hiện tại của dự án và khả năng mở rộng trong tương lai và môi trường hoặc nền tảng mục tiêu.
Nếu đây là tất cả những gì bạn cần làm, hãy viết javascript thuần túy một lần và bạn đã hoàn tất.
Tài liệu