先贴上代码
<script>
'use strict';
//定义一个简单的ajax函数
function ajax(url, fnSucc, fnFaild)
{
//1.创建Ajax对象
if(window.XMLHttpRequest)
{
var oAjax=new XMLHttpRequest();
}
else
{
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
//2.连接服务器(打开和服务器的连接)
oAjax.open('GET', url, true);
//3.发送
oAjax.send();
//4.接收
oAjax.onreadystatechange=function ()
{
if(oAjax.readyState==4){
if(oAjax.status==200){
//成功取回数据后,调用传入的函数
fnSucc(oAjax.responseText);
}
else{ //如果取数据失败,调用下面的函数
if(fnFaild){
fnFaild()
}
}
}
};
}//ajax函数定义结束
//声明一个全局变量:
var temp=10;
//定义一个函数 getData
function getData(){
ajax('baiduwiki.txt',
function(str){ //成功返回数据的函数
temp=5; //修改全局变量的值
alert('接收到的数据:'+str)
alert('回调函数内的temp:'+temp); //第一次弹出temp的值:5
},
function(){ //未能成功取回数据的函数
alert('失败!');
}
);
//第二次弹出temp的值:在回调函数内temp=5了,为何弹出10?
alert(temp);
}
//调用getData
getData();
</script>
对不住各位,问题代码有点长
我先定义了一个ajax函数、一个值为10的全局变量temp、一个自定义函数getData。在传给ajax的回调函数中,我重新给temp变量赋值temp=5。
调用getData。
我的问题是
alert('接收到的数据:'+str):数据可以正常返回。
alert('回调函数内的temp:'+temp):这次temp的值是5,因为我重新赋值为5。
在ajax调用后,我第二次弹出temp的值,temp为10?请问这是为什么?谢谢!
baiduwiki.txt文件装的是一个数组,每个数组元素是json格式的数据:
[{'href':'http://www,baidu.com','img':'img/doom.jpg','word':'MF Doom','intro':'MF Doom.MF Doom.MF Doom.MF Doom.MF Doom.'},{'href':'http://www,baidu.com','img':'img/nas.jpg','word':'Nas','intro':'Nas.Nas.Nas.Nas.Nas.Nas.'}]
很明显楼主还没有真正理解javascript异步回调函数的过程。
在执行
getData函数
的时候首先调用ajax函数
,ajax函数
则给onreadystatechange
事件注册(注意是注册,并没有执行)了一个方法,紧接着alert(temp)
(此时temp还没被修改,还是10);然后:ajax收到返回信息,触发onreadystatechange事件,执行之前注册的函数,才修改了temp的值,alert出修改后的
temp
所以前一个
alert(temp)
弹出的是5,后一个alert(temp)
弹出的是10。