这是由于AJAX 同步调用与异步调用的机制的问题
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script language="javascript" type="text/javascript">
var xmlHttp;
var domname;
var htmlstr;
var teststr;
function createXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
}
function startRequest(){
createXMLHttpRequest();
try{
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET","HTMLPage2.htm",true);
xmlHttp.setRequestHeader("If-Modified-Since","0");
xmlHttp.send(null);
}catch(exception){
alert("您要访问的资源不存在!");
}
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
if (xmlHttp.status == 200 || xmlHttp.status == 0){
//document.getElementById(domname).innerHTML=xmlHttp.responseText;
htmlstr=xmlHttp.responseText;
alert(htmlstr);//这里能获取htmlstr
}
}
}
function list()
{
startRequest()
alert(htmlstr);//这里一直不能获取htmlstr
return htmlstr;
}
</script>
</head>
<body>
<table width="100%" border="0" cellspacing="3" cellpadding="2">
<tr>
<td align="left" valign="top" id="list"></td>
</tr>
</table>
<div id="page"></div>
<script type="text/javascript">list();</script>
</body>
</html>
原因:
因为 xmlHttp.open("GET","HTMLPage2.htm",true); 第三个参数 的作用是async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
也就是说 为 true的时候是异步, htmlstr 还没有赋值,就去执行下面的 语句了。。所以一直打印不出来 htmlstr
把 true 改为 false 就可以解决了。