本文由lxingyue1009贡献
//核心对象变量
var xmlHttp;
//区分浏览器创建XMLHttpRequest核心对象
function create(){
if(window.XMLHttpRequset){
xmlHttp = new XMLHttpRequest();
}else if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
//ajax核心执行方法(此处为提交到servlet处理后,返回纯文本)
function run(){
create();
var value = document.getElementByIdx_x("id").value;
var URL = "/ajax/servlet/ajax?name="+value;
xmlHttp.open("GET",URL,true);
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}
//回调函数
function callback(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
var v = xmlHttp.responseText;
alert(v);
}
}
}
列子
///////////////////////////脚本javascript//////////////
var reYS = "";
function GetYSMon(){
reYS = "";
GetInfo();
document.forms[0].YSMoney.value = reYS;
}
function GetInfo(){
var thisFrm = document.forms[0];
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var infoxm = document.forms[0].xiangmu.options[document.forms[0].xiangmu.selectedIndex].text; //根据项目名称xiangmu查询
var URL="./ag_get_v_f_SubYS?openagent&xm="+infoxm;
xmlhttp.onreadystatechange = SetInfo;
xmlhttp.open("POST",true);
xmlhttp.send();
}
function SetInfo(){
var thisFrm = document.forms[0];
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var xmlDoc = xmlhttp.responseXML.documentElement;
var Data1 = "";
if(xmlDoc.getElementsByTagName_r("Data1")[0].childNodes[0] != null){
Data1 = xmlDoc.getElementsByTagName_r("Data1")[0].childNodes[0].nodeValue;
}
if(Data1!=""){
reYS = Data1;
}
}
}
////////////////////////问题/////////////////////////////////////
1、
xmlhttp的onreadystatechange为什么在send前面(onreadystatechange不是在看发送的消息的状态吗,为什么在send前面啊,send才是给服务器发送消息啊)
答:onreadystatechange只是告诉xmlhttp当它的state发生改变的时候执行名为qzzs的方法 并不是马上执行的 //////////
2.
mlHttp.open("GET",url,false);
改为
xmlHttp.open("GET",true);
flase为同步,true为异步
3.
问题出现在:xmlHttp.open("GET",false); false需要等待服务器的响应时间并且会锁定UI。那么有什么办法给客户一个友好的提示:It's in procesing,please wait....(加载中,请稍后...)
答:
<div id="myDiv" style="display:none">It's in procesing,please wait.... </div>
点击 Ajax 执行调用后台时,显示层。
document.all.myDiv.style.display="block"; 在回调函数里面隐藏层,程序到回调函数,则表示运行回客户端了 document.all.myDiv.style.display="none";