我有以下方法登录我的API:
login()
{
var formData = new FormData();
formData.append("admin[email]", "user");
formData.append("admin[password]", "pass");
var request = new XMLHttpRequest();
request.open("POST", "my_link");
request.onreadystatechange = (function() {
if (request.readyState === XMLHttpRequest.DONE && request.status === 201)
{
return function() { this.loadMembers(); }
}
});
request.send(formData);
}
然后我有我的方法,我试图在我的帖子异步请求完成后调用:
loadMembers()
{
....
}
由于某种原因,永远不会调用this.loadMembers()
。如果我在它上面放置一个测试console.log()(不在返回回调中),它调用就好了 - 所以我知道requestState和请求状态是正确的。
有更好的方法吗?或者我做错了什么?
由于
答案 0 :(得分:1)
这是因为你正在返回一个函数,而不是只调用loadMembers。
所以而不是:
request.onreadystatechange = (function() {
if (request.readyState === XMLHttpRequest.DONE && request.status === 201)
{
return function() { this.loadMembers(); }
}
});
你可能想要:
var that = this;
request.onreadystatechange = (function() {
if (request.readyState === XMLHttpRequest.DONE && request.status === 201)
{
that.loadMembers();
}
});
答案 1 :(得分:0)
记住"这个"在login()中它与(function(){if ....}中的那个不一样)所以你需要以rasmeister显示的方式保存这个var = this。