同一页面的全局变量的值不一样

yoory 2009-08-18 11:23:52




<!-- XMLHttpRequest对象的创建 -->
<script type="text/javascript">
var demosrc;
function CreateXMLHttp(){
var xmlHttp;
try{
//Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try{
xmlHttp = new AcitveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("您的浏览器不支持AJAX!");
return false;
}
}
}
return xmlHttp;

}

function ajax(){
xmlHttp = CreateXMLHttp();
var url="anti.asp";
url=url+"?j="+<%=r%>;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);

xmlHttp.send(null);
}
function stateChanged(){
if (xmlHttp.readyState==4)
{
demosrc = xmlHttp.responseText;
//document.write("ASP执行出来的结果是:"+ demosrc + "!");

}
}
ajax();
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>"); //输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>"); //输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
</script>

</head>
<body onLoad="menuFix();MM_preloadImages('Images/bank1-2.gif','Images/bank2-2.gif','Images/bank3-2.gif','Images/bank4-2.gif','Images/bank5-2.gif','Images/bank6-2.gif')">



<!--#include file="head.asp"-->
<!--图片框-->

<div class="indexmainbox">
<div id="indeximg">
<img src="Images/img/cp.jpg" width="976" height="164"> </div>
</div>
<a name="d"></a>
<script language="javascript">
document.write("ASP执行出来的结果是:"+ demosrc + "!");//输出结果为undefined
</script>
<!--过渡层--><div class="secondpart"></div>
<div id="indexcontent">
<div id="content">
<!-- 关于我们的侧边栏 -->
<!-- 中间内容 -->
</div>
</div>

<table width="976" height="56" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#D6DDE3">
<tr>
<td width="296" valign="top"><table width="90%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3"><img src="Images/r7_c3.jpg" width="289" height="10"></td>
</tr>
<tr>
<td width="2%" rowspan="2"><img src="Images/r8_c3.jpg" width="6" height="671"></td>
<td width="95%" valign="top" bgcolor="#d6dde3"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="middle">
<td width="1%" height="12"> </td>
<td width="33%" height="12"> </td>
<td width="1%" height="12"> </td>
<td width="61%" height="12"> </td>
<td width="1%"> </td>
</tr>

<script language="javascript">
document.write("B______ASP执行出来的结果是:"+ demosrc + "!");//输出结果正常:demo.htm
</script>
...全文
215 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhangYaoxing 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 toury 的回复:]
你仔细看了他的代码了?
注意到没有,他的ajax()里有 url=url+"?j="+ <%=r%>;

如果不在onload()里做,怎么可能把 <%=r%>传到后台呢?
[/Quote]
不明白你在说什么。你不觉得服务器端的东西应该是先于客户端执行的吗?
要说问题这里确实有问题,<%=r%>没加引号,所以应该是个数字,看着像防止缓存用的随机数。如果是这样的话,没有必要在服务器端生成,客户端做就好了,把<%=r%>换成Math.random()
aperson111 2009-08-19
  • 打赏
  • 举报
回复
16楼正解,对于异步的代码就是要有很多注意的地方,如果想要在得到需要的值后进行处理,必须在异步处理函数体里面判断异步结束后写代码,否则是会遇到取不到值得情况。因为调用异步函数后,直接执行下面的代码,而不是等异步函数结束后才执行。

顺便说句,对于取多个url的内容,而且必须都取完后才开始处理的情况,要慎之又慎,我经常出这样的错误。
ZhangYaoxing 2009-08-19
  • 打赏
  • 举报
回复
1楼的分析是对的。
怎么大家都跟window.onload干上了呢,这跟这个问题不相关的。onload事件的定义是所有元素都加载完的时候触发,包括链接的脚本(但并不包括脚本中执行的结果),图片等等。并不包括ajax执行结果。所以加不加都一样。但是你们把ajax()放到onload里面又是什么意思?

一种做法是把AJAX改成同步模式,这样改动最少。
xmlHttp.open("GET",url,false);
但是强烈建议不要这么做,用户体验极差,特别是网络慢的用户。
如果要用异步,首先要明白页面加载顺序。不相关的我就不提了,这里涉及到的是inline代码的执行时机。即直接放到<script>标签里面,并且不在函数里,或者在函数里又直接被执行了的那些代码,LZ的例子里这样的情况包括
ajax();
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
这样的代码在加载的时候就会被执行。
而AJAX运行于异步模式的时候,返回结果是需要一段时间的,具体时间不确定,依赖于网络状况。所以在调用ajax()之后进行的那些inline代码理论上讲可能执行正确,也可能不正确。
而唯一可以确定结果已经返回的地方就是这里
function stateChanged() {
if (xmlHttp.readyState==4) {
demosrc = xmlHttp.responseText;
//document.write("ASP执行出来的结果是:"+ demosrc + "!");
// 这个地方
}
}
所以如果要用异步模式,所有对AJAX结果的处理代码都必须直接或者间接地放到上面注释的那个地方。也就是说
<script language="javascript">
document.write("B______ASP执行出来的结果是:"+ demosrc + "!");//输出结果正常:demo.htm
</script>
这样的东西不再可以使用了,因为它们都有可能在AJAX返回之前执行而导致结果不正确。你必须写很多多余的代码来达到原来直接放页面里就可以实现的功能。
比如在上面这个script的地方放上
<div id="result"></div>
再在上面注释的地方放上
document.getElementById("result").innerHTML = demosrc;
toury 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhangyaoxing 的回复:]
1楼的分析是对的。
怎么大家都跟window.onload干上了呢,这跟这个问题不相关的。onload事件的定义是所有元素都加载完的时候触发,包括链接的脚本(但并不包括脚本中执行的结果),图片等等。并不包括ajax执行结果。所以加不加都一样。但是你们把ajax()放到onload里面又是什么意思?

[/Quote]
你仔细看了他的代码了?
注意到没有,他的ajax()里有 url=url+"?j="+<%=r%>;

如果不在onload()里做,怎么可能把<%=r%>传到后台呢?
mayer_mq 2009-08-19
  • 打赏
  • 举报
回复
本质来说是这样的,在你当前页面的流没有处理完时,后面的Ajax流不会得到,也就是responseText还没有拿到返回值。改一下onload;


window.onload = function(){
ajax(); //
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
var a = setTimeOut("alert()",3000);
clearTimeOut(a);
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
}
浴火_凤凰 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cunningboy 的回复:]
不是不一样,function ajax()是异步执行的,在你第一个输出地方anti.asp还没有返回结果xmlHttp.responseText,所以是undefined。
在文档结尾处,也就是文档加载结束后,anti.asp执行完了,这时候就有xmlHttp.responseText了,所以demosrc就有值了。
[/Quote]
就是这个意思
CunningBoy 2009-08-18
  • 打赏
  • 举报
回复
不是不一样,function ajax()是异步执行的,在你第一个输出地方anti.asp还没有返回结果xmlHttp.responseText,所以是undefined。
在文档结尾处,也就是文档加载结束后,anti.asp执行完了,这时候就有xmlHttp.responseText了,所以demosrc就有值了。
toury 2009-08-18
  • 打赏
  • 举报
回复
function ajax(){
var x= CreateXMLHttp();
var url="anti.asp"+"?j="+<%=r%>;
//url=url+"&sid="+Math.random();
url +="&sid="+new Date().getTime();
alert(url);//看看地址字串对吗?
x.onreadystatechange=stateChanged(x);
x.open("GET",url,true);
x.send(null);
}
function stateChanged(x){
alert(x);//看看xmlhttp传进来了吗?
alert(x.readyState);//跟踪一下
if (x.readyState==4)
{
if (x.status==200||x.status==0)
{
demosrc = xmlHttp.responseText;
document.write("ASP执行出来的结果是:"+ demosrc + "!");
}
}
}
yoory 2009-08-18
  • 打赏
  • 举报
回复
2.anti.asp


<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<%
'判断是来路是否允许,防盗链核心
dim rhost
rhost = request.ServerVariables("HTTP_REFERER")
ahost = request.ServerVariables("HTTP_HOST")

if left(replace(rhost,"http://",""),len(ahost)) <> ahost then
response.Write("<font color=red>请不要直接访问此文件!</font>")
response.End()
end if

%>


<%
dim j
j = request.QueryString("j")
if isNumeric(j)=false then
response.Write("demo0.htm")
elseif j=1 then
response.Write("demmo1_Arcw1t.htm")
elseif j=2 then
response.Write("demmo2_457Qlb.htm")
elseif j=3 then
response.Write("demmo3_uL4gYe.htm")
elseif j=4 then
response.Write("demmo4_Pzeq5n.htm")
elseif j=5 then
response.Write("demmo5_koywab.htm")
elseif j=6 then
response.Write("demmo6_Jlo6Ce.htm")
elseif j=7 then
response.Write("demmo7_DFTWaj.htm")
elseif j=8 then
response.Write("demmo8_zzbMiq.htm")
elseif j=9 then
response.Write("demmo9_955Hwv.htm")
elseif j=10 then
response.Write("demmo10_VB3jxl.htm")
elseif j=11 then
response.Write("demmo11_woi2jF.htm")
elseif j=12 then
response.Write("demmo12_wFsw1O.htm")
elseif j=13 then
response.Write("demmo13_owke1l.htm")
elseif j=14 then
response.Write("demmo14_9Cbewl.htm")
elseif j=15 then
response.Write("demmo15_brU2gi.htm")

else
response.Write("demo0.htm")
end if
%>


yoory 2009-08-18
  • 打赏
  • 举报
回复
我只要加了

window.onload=function()

就会全部是 undefined

我把代码全拿出来大家看看

1.zxys.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>

<%
dim r
r = Request.QueryString("d")
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>在线演示</title>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<meta name="description" content="" />
<meta name="keywords" content="" />
<link rel="stylesheet" type="text/css" href="css/neitway.css" />
<script type="text/javascript" src="js/indexserch.js"></script>
<script type="text/javascript" src="js/menu.js"></script>
<style type="text/css">
<!--
form {display: inline;border: none;}
.style1 {font-size: 12px}
a { color: #538fd8;text-decoration: underline;cursor: hand;}
input { background-color: #d6dde3;border: none;}
.style2 {font-size: 14px}
-->
</style>

<!-- XMLHttpRequest对象的创建 -->
<script type="text/javascript">



var demosrc;
function CreateXMLHttp(){
var xmlHttp;
try{
//Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try{
xmlHttp = new AcitveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("您的浏览器不支持AJAX!");
return false;
}
}
}
return xmlHttp;

}

function ajax(){
var x= CreateXMLHttp();
var url="anti.asp";
url=url+"?j="+<%=r%>;
url=url+"&sid="+Math.random();
x.onreadystatechange=stateChanged(x);
x.open("GET",url,true);
x.send(null);
}
function stateChanged(x){
if (x.readyState==4)
{
if (x.status==200)
{
demosrc = xmlHttp.responseText;
document.write("ASP执行出来的结果是:"+ demosrc + "!");
}
}
}

window.onload = function(){

ajax();
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");
}
</script>

</head>
<body onLoad="menuFix();MM_preloadImages('Images/bank1-2.gif','Images/bank2-2.gif','Images/bank3-2.gif','Images/bank4-2.gif','Images/bank5-2.gif','Images/bank6-2.gif')">



<!--#include file="head.asp"-->
<!--图片框-->

<div class="indexmainbox">
<div id="indeximg">
<img src="Images/img/cp.jpg" width="976" height="164"> </div>
</div>
<a name="d"></a>
<script language="javascript">
document.write("ASP执行出来的结果是:"+ demosrc + "!");
</script>
<!--过渡层--><div class="secondpart"></div>
<div id="indexcontent">
<div id="content">
<!-- 关于我们的侧边栏 -->
<!-- 中间内容 -->
</div>
</div>

<table width="976" height="56" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#D6DDE3">
<tr>
<td width="296" valign="top"><table width="90%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="3"><img src="Images/r7_c3.jpg" width="289" height="10"></td>
</tr>
<tr>
<td width="2%" rowspan="2"><img src="Images/r8_c3.jpg" width="6" height="671"></td>
<td width="95%" valign="top" bgcolor="#d6dde3"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="middle">
<td width="1%" height="12"> </td>
<td width="33%" height="12"> </td>
<td width="1%" height="12"> </td>
<td width="61%" height="12"> </td>
<td width="1%"> </td>
</tr>

<script language="javascript">
document.write("B______ASP执行出来的结果是:"+ demosrc + "!");
</script>

<% dim j : j = 1 %>

<%
dim rj
rj = Cint(request.QueryString("j"))
dim demotext

'--help: guiyang()-贵阳,tianjing()-天津,chongqing()-重庆巴山,office()-办公室,dongguan()-东莞, techpark()-科技园
'--mayuanroad() 贵阳麻园大道, hexi() 河西放眼视界,wuhan(),武汉 ,changzhou() 沧洲,changchunjd()长春
'--jxjs() 江西嘉盛
'-------------------------------------------------------------------------------
call dongguan()
call office()

call mayuanroad()
call changzhou()
call gxps()
call wuhan()
call changchunjd()

'-------- repeat ------------------------------------------------------------


'-------------------------------------------------------------------------------
%>

<script language="javascript">
document.write("A______ASP执行出来的结果是:"+ demosrc + "!");
</script>



<% sub dongguan() %>
<tr valign="middle">
<td> </td>
<td><a href="?j=<%=j%>&d=3#d" onclick="document.showtitle.title.value='演示平台<%=j%>福民大厦停车场';document.videoshow.all.iframe_show.src=demosrc"><img src="images/pic1.jpg" width="88" height="78"></a></td>
<td> </td>
<td><span class="style1"><strong>演示平台<%=j%> </strong><a href="?j=<%=j%>&d=3#d" onclick="document.showtitle.title.value='演示平台<%=j%>福民大厦停车场';document.videoshow.all.iframe_show.src=demosrc">东莞市福民大厦</a><br>
通过网络高速球实时监控东莞市福民大厦停车场状况(中国电信宽带)</span></td>
<td> </td>
</tr>
<tr valign="middle" height="30">
<td> </td><td> </td><td> </td><td> </td><td> </td>
</tr>
<%
if j = rj then
demotext = "演示平台" & j & "福民大厦停车场"
end if
j=j+1:end sub %>

</table></td>
</tr>
</table></td>
<td width="3%" rowspan="2" align="right" valign="top"><img src="Images/r8_c9.jpg" width="8" height="671"></td>
</tr>
<tr>
<td valign="bottom" bgcolor="#d6dde3"><img src="Images/r23_c4.jpg" width="275" height="12"></td>
</tr>
</table></td>
<td width="680" valign="top" bgcolor="#D6DDE3">
<table width="680" height="685" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><table>
<tr align="left" valign="middle">
<td width="299"><form name="showtitle">
<table width="550">
<tr align="left" valign="middle">
<td width="88"><strong><span class="style2">在线演示</span> >></strong></td>
<td>
<input name="title" type="text" id="title" style="background:#D6DDE3; border-width:0" value="<%if request.QueryString("j")="" then%>演示平台<%else%><%=demotext%><%end if%>" size="70" ></td>
</tr>
</table>
</form></td>
<td width="299"><td>
</tr>
</table></td>
</tr>

<tr>
<td valign="bottom">
<form id="videoshow" name="videoshow">
<%if request.QueryString("j")="" then%>
<iframe id="iframe_show" name="show" align="middle" width="667" height="445" src="demmo0.htm" scrolling="No" frameborder="0"></iframe>
<%else%>
<script type="text/javascript">
document.write("<iframe id='iframe_show' name='show' align='middle' width='667' height='445' src='"+ demosrc + "' scrolling='No' frameborder='0'></iframe>");

</script>
<%end if%>
</form> </td>
</tr>

<tr>
<td valign="bottom">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td><img src="images/r22_c12_3.jpg" width="669" height="196" border="0"></td>
</tr>
</table> </td>
</tr>
</table>
<script language="javascript">
document.write("ASP执行出来的结果是:"+ demosrc + "!");
</script>
</td>
</tr>
</table><!--#include file=bottom.asp-->

toury 2009-08-18
  • 打赏
  • 举报
回复

x.onreadystatechange=stateChanged(x);

---------->改为
x.onreadystatechange=stateChanged(x);
toury 2009-08-18
  • 打赏
  • 举报
回复
你的xmlhttp没传递到回调函数。改一下

<script type="text/javascript">
var demosrc;
function CreateXMLHttp(){
var xmlHttp;
try{ xmlHttp = new XMLHttpRequest();}
catch(e){
try{ xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){
try{xmlHttp = new AcitveXObject("Microsoft.XMLHTTP");}
catch (e){alert("您的浏览器不支持AJAX!"); return false;}
}
}
return xmlHttp;
}

function ajax(){
var x= CreateXMLHttp();
var url="anti.asp";
url=url+"?j="+<%=r%>;
url=url+"&sid="+Math.random();
x.onreadystatechange=stateChanged(x);
x.open("GET",url,true);
x.send(null);
}

function stateChanged(x){
if (x.readyState==4){
if(x.status==200||x.status==0){
demosrc = xmlHttp.responseText;
}
//document.write("ASP执行出来的结果是:"+ demosrc + "!");
}
}
window.onload=function(){
ajax();
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>"); //输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>"); //输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
}
</script>


yoory 2009-08-18
  • 打赏
  • 举报
回复
不行!
我改成这样后, 所有的都是 undefined 了.
CunningBoy 2009-08-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yoory 的回复:]
xmlHttp.readyState==4
不是已经代表了执行完了吗?
[/Quote]
function ajax(){
xmlHttp = CreateXMLHttp();
var url="anti.asp";
url=url+"?j="+<%=r%>;
url=url+"&sid="+Math.random();// 告诉服务器提交给anti.asp处理
xmlHttp.onreadystatechange=stateChanged; // anti.asp处理结束后的响应函数
xmlHttp.open("GET",url,true); // 提交服务器处理
xmlHttp.send(null);
}
// ajax()只是执行提交anti.asp处理,并告诉程序anti.asp处理完成后由stateChanged响应处理结果。
// 程序执行到ajax时候,会继续处理本页的其余代码,不会等待anti.asp结束。

所以xmlHttp.readyState==4是在anti.asp处理完之后才真正执行的。程序执行顺序如下:
CreateXMLHttp()
|
ajax()
|
提交anti.asp执行,并告诉程序anti.asp处理完后由stateChanged响应 -> stateChanged等待
| |
第一个document.write("ASP执行出来的结果是:"+ demosrc + "!"); |
| |
...... |
| anti.asp处理完成
| |
最后的document.write("ASP执行出来的结果是:"+ demosrc + "!"); stateChanged获得demosrc值
yoory 2009-08-18
  • 打赏
  • 举报
回复
谢谢 toury , 我试试先!
toury 2009-08-18
  • 打赏
  • 举报
回复
把倒数第二行的>去掉
toury 2009-08-18
  • 打赏
  • 举报
回复

window.onload=function(){
ajax();
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>"); //输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>"); //输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
document.write("ASP执行出来的结果是:"+ demosrc + "!<br>");//输出结果为undefined
>
}
yoory 2009-08-18
  • 打赏
  • 举报
回复
xmlHttp.readyState==4
不是已经代表了执行完了吗?
yoory 2009-08-18
  • 打赏
  • 举报
回复
那如何解决这个问题呢??

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧