5 回答

TA貢獻1853條經驗 獲得超6個贊
var req;
function validate() {
var idField = document.getElementById("userid");
var url = "Validate.jsp?id=" + encodeURI(idField.value);
init();
req.open("GET", url, true);
req.onreadystatechange = callback;
//callback就是回調函數,當觸發req.onreadystatechange時,調用callback獲取url傳回的東西
req.send(null);
}
function init() {
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}
function callback() {
if(req.readyState == 4) { //反饋回到客戶端
if(req.status == 200) { //反饋完全正常
//alert(req.responseText);
var msg = req.responseXML.getElementsByTagName("msg")[0];
//alert(msg);
setMsg(msg.childNodes[0].nodeValue);
}
}
}
function setMsg(msg) {// 頁面中的span <span id="usermsg"></span>
//alert(msg);
mdiv = document.getElementById("usermsg");
if(msg == "invalid") {
mdiv.innerHTML = "<font color='red'>username exists</font>";
} else {
mdiv.innerHTML = "<font color='green'>congratulations! you can use this username!</font>";
}
}
Validate.jsp
<%
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-store"); //HTTP1.1
response.setHeader("Pragma", "no-cache"); //HTTP1.0
response.setDateHeader("Expires", 0); //prevents catching at proxy server
System.out.println(request.getParameter("id"));
//check the database 可以先去數據庫取
response.getWriter().write("<msg>valid</msg>");//寫這個內容,隨便指定
%>

TA貢獻1815條經驗 獲得超13個贊
一般來說Ajax最大的一個回調函數就是onreadystatechange,這個應該成為事件,每次XMLHttpRequest這個Object在URL請求,狀態改變的時候就會觸發這個事件。那么你用onreadystatechange=一個函數,這樣讓你的函數在XMLHttpRequest state change 的時候可以及時捕捉到。當然就不用setTimeout來捕捉啦。所以會方便,在你的回調函數里面可以檢測Ajax對象的值,包括返回的請求的HTML,當然只有在readyState=4的時候而且status=200的時候才能用。status就是HTML狀態,有200,400,500之類的。
總之,回調函數就是一個自定義的函數,在發生特定的事件的時候調用來處理這個事件的函數

TA貢獻1824條經驗 獲得超8個贊
回調函數的意思就是在你執行過一個事件或者動作之后,你想它接著能夠繼續做的事件。
例如當你用ajax請求一個數據之后,當數據請求回來了,你希望可以進行一個動作去告訴你數據已經請求好了,那么此時就可以使用一個回調函數來執行你所期望的事件。
- 5 回答
- 0 關注
- 2079 瀏覽
添加回答
舉報