今天学习了Ajax,想自己封装一个函数,结果第一步就难住了,我无论怎样都获取不到文本文件或者Json里的值,难受的找了半天bug,百度了好久,(不是很懂后台代码,用文本文件保存的数据),找不到适合我的解决方案。关键是控制台没有报错,就是alert();出来是个空字符串......
但是,重点来了,我猛然发现会不会是变量作用域的问题!!
我在外面定义的xmlDoc=xmlhttp.responseText;还忘记写var (写了也不好使)
当我注释掉它,并且把alert(xmlDoc);换成alert(xmlhttp.responseText);的时候,奇迹出现了,我获取到了数据(笑哭......)
现将代码呈上:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>封装Ajax</title>
</head>
<body>
<button>提交数据</button>
<script>
var oBtn = document.querySelector('button');
oBtn.onclick = function(){
var xmlhttp;
//为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。
//如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","test.json",true);
xmlhttp.send();
// xmlDoc=xmlhttp.responseText;
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4){
if( 200<=xmlhttp.status<300||xmlhttp.status==304 ){
alert(xmlhttp.responseText); //这个bug是变量问题 这是另一个函数啦!!!!!!
}else{
alert('请求失败');
}
}
}
}
</script>
</body>
</html>
{
"name": "stt",
"age": "20"
}
这是结果:
这个bug很......希望帮到和我有一样困扰的人~