方法的XMLHttpRequest后不会被调用完成
问题描述:
我有以下方法登录到我的API:方法的XMLHttpRequest后不会被调用完成
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和请求状态是正确的。
有没有更好的方法来做到这一点?或者我做错了什么?
谢谢
答
这是因为你正在返回一个函数,而不是只调用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();
}
});
答
还记得 “这个”,在登录()不作为(函数内部的一个,则这个(){如果....}),所以你需要以rasmeister显示的方式保存这个var = this。
这不起作用,因为onreadystatechange回调的上下文中的“this”是XMLHttpRequest,而不是我的类。 – Peter
好的,更新它来捕获'this'上下文,以便在'that'的函数内可用。 – rasmeister