Đây là bản chất, những gì AJAX là cho. Trang của bạn tải và bạn thêm sự kiện vào phần tử. Khi người dùng khiến sự kiện được kích hoạt, hãy nói bằng cách nhấp vào nội dung nào đó, Javascript của bạn sử dụng XMLHttpRequest object để gửi yêu cầu tới máy chủ.
Sau khi máy chủ phản hồi (có thể với đầu ra), một hàm/sự kiện Javascript khác cho bạn một nơi để làm việc với đầu ra đó, bao gồm chỉ cần gắ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 kích thước của dự án và tình huống cụ thể của bạn, nó có thể đơn giản hơn để chỉ sử dụng Javascript đơn giản.
Plain Javascript
Trong ví dụ rất cơ bản này, chúng tôi gửi một yêu cầu đến 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
.
Các javascript
// handles the click event for link 1, sends the query
function getOutput() {
getRequest(
'myAjax.php', // URL for the PHP file
drawOutput, // handle successful request
drawError // handle error
);
return false;
}
// handles drawing an error message
function drawError() {
var container = document.getElementById('output');
container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
var container = document.getElementById('output');
container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
var req = false;
try{
// most browsers
req = new XMLHttpRequest();
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
// try an older version
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>
Các PHP
// file myAjax.php
<?php
echo 'hello world!';
?>
Hãy thử nó ra: http://jsfiddle.net/GRMule/m8CTk/
Với một thư viện javascript (jQuery et al)
Có thể cho rằng, đó là rất nhiều mã Javascript. 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 nhiều toán tử logic hơn, tất nhiên, nhưng vẫn còn rất nhiều thứ đang diễn ra ở đó. Nếu bạn có kế hoạch làm rất nhiều loại điều này trong dự án của bạn, bạn có thể tốt hơn với một thư viện javascript.
Sử dụng cùng một HTML và PHP từ trên cao, đâ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 lên mã một chút để phù hợp hơn với phong cách chung của jQuery, nhưng bạn sẽ có được ý tưởng:
// handles the click event, sends the query
var 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 thử nó ra: http://jsfiddle.net/GRMule/WQXXT/
Đừng vội vã ra cho jQuery chỉ chưa: 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 cũng giống như 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ư trong ví dụ đầu tiên, cộng thêm toàn bộ lô 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 của bạn và khả năng mở rộng và môi trường hoặc nền tảng mục tiêu trong tương lai.
Nếu đây là tất cả những gì bạn cần làm, hãy viết javascript đơn giản một lần và bạn đã hoàn tất.
Documentation
chỉ đơn giản là không có, không có cách nào để làm điều này, ngoại trừ gọi phương thức yêu cầu sử dụng ajax. – TheVillageIdiot
Bạn biết: PHP chạy trên máy chủ, nhưng JS trên máy khách? _cannot_ này hoạt động theo cách này. – KingCrunch
chờ đợi, không phải là ' Php query (" hello "); ?> 'render bởi php khi trang được tải? nếu có thì anh ta có thể nhận được đầu ra của 'truy vấn (" hello ")' trong hàm js. – TheVillageIdiot