永发信息网

为什么在ajax的构造函数中,xmlHttp.onreadystatechange中this.XX值变成未定义了

答案:2  悬赏:0  手机版
解决时间 2021-01-31 14:40
构造函数
<script>
$ = document.getElementById;
function news() {
this.divid = "";

this.get = function(divid) {
xmlHttp = this.GetXmlHttpObject();
if (xmlHttp==null) {
alert ("您的浏览器不支持AJAX!");
return;
}
this.divid = divid;
//this.get_Changed();
var url = "news.php";
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange=this.get_Changed;
xmlHttp.send(null);
},

this.get_Changed = function() {
if (xmlHttp.readyState==4) {
str = xmlHttp.responseText;
$(this.divid).innerHTML = str;
alert(this.divid) //为什么this.divid 为undefine呢
}
}

this.GetXmlHttpObject = function() {
var xmlHttp=null;
try { // Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e) { // Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

}

var News = new news();
News.get("aa"); //在aa中加载news.php的内容

</script>







已经解决了,确实是作用域的问题,谢谢抛砖引玉
用_this就搞定了
function news() {
var _this = this;
this.divid = "";

this.get = function(divid) {
……
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange=this.get_Changed;
xmlHttp.send(null);
},

this.get_Changed = function() {
if (xmlHttp.readyState==4) {
str = xmlHttp.responseText;
$(_this.divid).innerHTML = str;
alert(_this.divid);
}
}
}
最佳答案
回调的时候作用域已经变了,this好像变成xmlHttp这个还是什么忘掉了,你调试一下就知道了。
全部回答
虽然我很聪明,但这么说真的难到我了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
dyson(汉光百货店)地址在什么地方,我要处理
有哪位高人帮帮忙啊!用PB(PowerBuilder)做
【32123】第四个字母是N的单词32123
新乡胖东来电器都有啥牌子?
苏宁易购(苏宁生活广场店)地址好找么,我有些
怎样查询电信宽带帐号
做信贷工作,捷越与恒昌哪家好,急。谢谢大神
ALL in ALL 的情侣网名
DYSON戴森(北京SKP店)地址在哪,我要去那里办
大学有什么学校是导游吗
牧草种子能存放多久不坏。谢谢
信诚乐乐棋牌室地址在什么地方,想过去办事
求几部类似人在囧途的国产搞笑电影~~~~~
我是在校学生,如果再肯德基兼职培训了一两天
膳魔师怎么去啊,我要去那办事
推荐资讯
打那个电话举报学校暑假、寒假补课?
第一次登陆企业农行网上银行需要下载什么软件
【口腹蜜剑】口蜜腹剑说的是谁
与胺腆酮的抗心律失常机制无关的是A.抑制K外
打某个电话号码找某人的英语
邮件指那些东西,快递的商品能叫邮件吗
一般冬眠的动物几月醒来?
欢迎加入NHK动画和漫画内容一样吗?
树下野狐的搜神记来自于哪个游戏?
Baha Men是什么音乐风格
红掌越长越散
星期建设银行上班吗?我只有今天和明天,也就
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?