js_ajax中变量的作用域

齐思贤 2014-01-06 03:21:55
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的生成放到方法里面,就没有效果,怎么回事?
感觉逻辑从上往下执行,作用域没有问题,但是就是没有效果。
求教

...全文
285 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-01-07
  • 打赏
  • 举报
回复
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; } }
  • 打赏
  • 举报
回复
你callback引用不到那个变量出错了,要不callback放到showMsg中就可以申明为局部变量,而不是全局的 function callBack(){ if (xmlHttp.readyState==4 && xmlHttp.status==200){ document.getElementById("msg").innerHTML=xmlHttp.responseText; } }
齐思贤 2014-01-06
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
function showMsg(){ var xmlHttp; 你这个是方法内的 。
我觉得,下面的代码不都是在这个方法内执行的吗?
tony4geek 2014-01-06
  • 打赏
  • 举报
回复
function showMsg(){ var xmlHttp; 你这个是方法内的 。

52,792

社区成员

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

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