用面向对象的方式写了个Ajax,回调函数报错,高人给看看

redstarofsleep 2011-02-22 04:32:47

function Ajax(callback) {
this.xmlreq = this.getXMLRequest();
this.callback = callback;
}

/*
* 获取XMLHttpRequest对象
*/
Ajax.prototype.getXMLRequest = function() {
var xmlHttpRequest = null;
if (window.XMLHttpRequest) {
xmlHttpRequest = new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined") {
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlHttpRequest;
};

/*
* 发送请求
*/
Ajax.prototype.sendRequest = function(url, params, HttpMethod) {
if (!HttpMethod) {
HttpMethod = "GET";
}

if (this.xmlreq) {
this.xmlreq.onreadystatechange = this.selfCallback;
this.xmlreq.open(HttpMethod,url,true);
this.xmlreq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
this.xmlreq.send(params);// 请求是发送成功的,后台有日志打印
}
// 这里打印的是[object]
alert(this.xmlreq);
};

/*
* 回调函数
*/
Ajax.prototype.selfCallback = function() {
// 这里打印的是[undefined],然后就报错了。。。。
alert(this.xmlreq);
var ready = this.xmlreq.readyState;
var data = null;

if (ready == 4) {
data = this.xmlreq.responseXML;
} else {
data = "loading... " + ready;
return;
}
this.callback(data);
};
...全文
128 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2011-02-23
  • 打赏
  • 举报
回复
因为在onreadystatechange函数中,this对象在不同浏览器下表现不同,所以需要对this对象进行闭包封装,具体可以参考下面这篇文章

ajax onreadystatechange状态转换函数研究
KK3K2005 2011-02-22
  • 打赏
  • 举报
回复
this.xmlreq.onreadystatechange = this.selfCallback;

则 执行 onreadystatechange 的时候 里面的this指向的是 xmlreq 这样就不是你的本意了吧
redstarofsleep 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 danica7773 的回复:]
JScript code

this.xmlreq.onreadystatechange = (function(o) {
return function() {
o.selfCallback();
}
})(this);
[/Quote]能解释下这样改是什么意思吗?为什么要这样改,原来那样错哪了?
打字员 2011-02-22
  • 打赏
  • 举报
回复



this.xmlreq.onreadystatechange = (function(o) {
return function() {
o.selfCallback();
}
})(this);

52,797

社区成员

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

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