我想使用XML将XMLHttpRequest发送到服务器。在处理程序函数中,我需要调用周围类的方法。有没有办法实现这一目标?
我知道JavaScript中this
的用法有些棘手。因此,我尝试了使用this
和bind(this)
的所有排列,但没有成功。
class ServerRequest
{
askServer(url)
{
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
// Got the response
this.foo().bind(this); // How to access foo-method??
}
}
request.open('GET', url);
request.send();
}
foo()
{
// Do something here
}
}
我的目标只是实现此foo方法,但是Firefox控制台向我显示了消息“ TypeError:this.foo不是函数”。
答案 0 :(得分:1)
您可以通过两种方式处理它。
使用箭头功能
askServer(url)
{
var request = new XMLHttpRequest();
request.onreadystatechange = () => {
if (request.readyState == 4 && request.status == 200) {
// Got the response
this.foo(); // How to access foo-method??
}
}
request.open('GET', url);
request.send();
}
foo()
{
// Do something here
}
如您所见,由于箭头函数作用域的绑定方式不同,我现在按变量而不是this
引用请求对象。
您可以在这里看到如何引用请求:
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange#Example
将上限参考保存在变量中:
askServer(url)
{
var request = new XMLHttpRequest();
var self = this;
request.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// Got the response
self.foo(); // How to access foo-method??
}
}
request.open('GET', url);
request.send();
}
foo()
{
// Do something here
}