首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

js_ajax中变量的作用域解决方案

2014-01-08 
js_ajax中变量的作用域ajax的小程序bodyinput typebutton onclickshowMsg() value调用ajax显示

js_ajax中变量的作用域
ajax的小程序 
 <body>
    <input type="button" onclick="showMsg()" value="调用ajax显示内容" >
    <span id="msg"></span>
  </body>
  <script type="text/javascript">
  var xmlHttp;
function showMsg(){
initXmlHttp();
xmlHttp.open("post","content.html");
xmlHttp.onreadystatechange =callBack;
xmlHttp.send(null);
}
function initXmlHttp(){
if(window.xmlHttpRequest){
xmlHttp=new xmlHttpRequest();
}else{
xmlHttp=new ActiveXObject("Microsoft.xmlHttp");
}
}
function callBack(){
if (xmlHttp.readyState==4 && xmlHttp.status==200){
document.getElementById("msg").innerHTML=xmlHttp.responseText;
}
}
  </script>
</html>
这样可以执行,但是代码一换
function showMsg(){
  var xmlHttp;
把xmlHttp的生成放到方法里面,就没有效果,怎么回事?
感觉逻辑从上往下执行,作用域没有问题,但是就是没有效果。
求教


[解决办法]
function callBack(){
  if (xmlHttp.readyState==4 && xmlHttp.status==200){
    document.getElementById("msg").innerHTML=xmlHttp.responseText;
  }
}
这个 xmlHttp 如果不是全局变量就不能正常工作

如果要将 xmlHttp 做成局部变量,就要将回调函数也写成局部的

xmlHttp.onreadystatechange =callBack;
改写为
xmlHttp.onreadystatechange = function(){
  if (xmlHttp.readyState==4 && xmlHttp.status==200){
    document.getElementById("msg").innerHTML=xmlHttp.responseText;
  }
}

热点排行