AJAX 同步调用与异步调用的问题
2009-02-25 16:10
495 查看
代码如下:
<!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 就可以解决了。
相关文章推荐
- Ajax同步调用和异步调用的选择
- 在js的开发中ajax的同步异步问题。
- Ajax异步同步问题,Ajax如何获取返回值
- AjaxPro实现异步调用,解决浏览器假死及超时问题
- js中请求数据的$post和$ajax区别(同步和异步问题)
- ExtJS4 ajax请求同步异步问题
- 关于$.ajax同步和异步的问题和提交后台的一些问题。
- struts拦截器拦截ajax异步调用异常问题 (二)
- Silverlight中通过Javascript的XmlHttp调用服务器端内容的同步与异步问题
- ajax同步异步问题
- ajax的同步和异步问题 (转)
- ajax 同步异步调用
- 关于ajax同步与异步的实现问题
- AjaxPro实现异步调用,解决浏览器假死及超时问题
- Jquery:Ajax解析XML数据(同步及异步调用)
- 多个ajax请求的同步异步问题
- struts拦截器拦截ajax异步调用失败问题
- WCF方法“异步调用”的“同步问题”
- ajax异步、同步问题,KindEditor ajax提交内容,ajax提交form表单 解决按两次的问题
- ajax同步请求,及js调用含ajax的方法的返回值问题