Ok ... Tôi chỉ là một người đam mê, vì vậy hãy tha thứ cho tôi bất kỳ sự thiếu chính xác trong đánh máy nhưng công trình này: Một định dạng tôi sử dụng cho cuộc gọi ajax trong một yếu tố <a>
là:
<a href="javascript:" onclick="functionThatReallyCallsAjax()">
Vì vậy, rằng tôi có tính linh hoạt hơn (trong trường hợp tôi cần kiểm tra điều gì đó trước khi gửi ajax).Bây giờ, đối với một cuộc gọi ajax bạn cần:
- tập tin gì để gọi
- Phải làm gì với những phản hồi từ các tập tin mà bạn gọi là
- Phải làm gì nếu một I/O lỗi xảy ra
Vì vậy, chúng tôi có chức năng này - không phải của tôi, leeched trong số hàng ngàn từ một nơi nào đó - có lẽ ở đây :) - và có lẽ nổi tiếng, lời xin lỗi của tôi cho tác giả, ông là một thiên tài: Đây là những gì bạn gọi cho điều ajax, nơi ' url 'là tệp bạn muốn' ajax ',' thành công 'là tên của hàm có liên quan đến kết quả và lỗi là tên của hàm xử lý lỗi IO.
function doAjaxThing(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;
}
Bạn sẽ tự nhiên cần phải bao gồm sự thành công + lỗi chức năng:
function dealWithResponse(textFromURL)
{
//textFromURL is whatever, say, a PHP you called in the URL would 'echo'
}
function ohNo()
{
//stuff like URL not found, etc.
alert("I/O error");
}
Và bây giờ mà bạn đang trang bị đó, đây là cách bạn soạn các cuộc gọi thực bên trong hàm bạn gọi tại số điện thoại <a>
:
function functionThatReallyCallsAjax()
{
//there are probably many scenarios but by having this extra function,
//you can perform any processing you might need before the call
doAjaxThing("serverFile.php",dealWithResponse,ohNo);
}
Một trường hợp có thể là khi bạn cần chuyển biến số PHP bạn chưa có trước đây. Trong trường hợp này, cuộc gọi sẽ trở thành:
doAjaxThing("serverFile.php?parameter1=dogsRock",dealWithResponse,ohNo);
Và bây giờ không chỉ bạn gửi PHP cho JS, bạn cũng có JS gửi tới PHP. Weeeee ...
Từ cuối cùng: ajax không phải là ngôn ngữ, đó là một 'lừa' javascript. Bạn không cần phải hiểu đầy đủ về chức năng 'doAjaxThing' đầu tiên sử dụng, chỉ cần đảm bảo rằng bạn đang gọi nó đúng cách. Nó sẽ tự động 'gọi' hàm 'WithResponse' thỏa thuận khi phản hồi từ máy chủ đến. Lưu ý rằng bạn có thể tiếp tục thực hiện công việc của mình (không đồng bộ - quá trình không liên kết thời gian) cho đến khi phản hồi đến - đó là khi 'thỏa thuận WithResponse' được kích hoạt -, trái ngược với việc dừng trang và chờ (đồng bộ - thời gian gắn) cho đến một câu trả lời đến. Đó là sự kỳ diệu của ajax (Không đồng bộ JAvascript và Xml).
Trong trường hợp của bạn, bạn muốn thêm tiếng vang ("thành công") - hoặc lỗi! - trong PHP, để hàm 'dealWithResponse' biết phải làm gì dựa trên thông tin đó.
Đó là tất cả những gì tôi biết về ajax. Hy vọng điều này sẽ giúp :)
thêm ngăn chặn khi khởi động hàm deletePost() – Phiter
'href = #' thêm điều này và ngăn chặn mặc định bên trong chức năng onclick –