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 关注
- 2027 浏览
添加回答
举报