我理解Ajax是异步的,但我仍然无法理解对象作用域以及javascript如何使用this
的方式如何工作。
mylibrary = {
my_variable: 0,
my_function: function() {
$.ajax({
url: "/theinternet",
method: "POST",
data: {
// things
},
success: function(response) {
this.my_variable += 1; // How do I access my_variable?
console.log("HOORAY!");
},
error: function(error) {
console.log("ERROR");
}
// }).bind(this); this doesn't work.
}).bind(this);
}
}
我想如何在ajax调用的成功函数中访问my_variable
?
这似乎是人们需要做的非常普遍的事情,不是吗?
答案 0 :(得分:2)
使用对象名称。更改this.my_variable += 1;
要
mylibrary.my_variable += 1;
答案 1 :(得分:2)
<强>解决方案强>
将my_function: function()
更改为箭头函数() =>
语法可以解决问题。
<强>背景强>
问题是传递给ajax调用的this
值来自my_function
而不是my_library
对象。这是因为function
始终使用自己的this
范围,您可以使用不会产生新this
的箭头函数。
答案 2 :(得分:1)
您可以在ajax请求之外的变量中分配this
的引用,以便可以在ajax请求中访问该变量。像这样的东西,
mylibrary = {
my_variable: 0,
my_function: function() {
var _this = this;
$.ajax({
url: "/theinternet",
method: "POST",
data: {
// things
},
success: function(response) {
_this.my_variable += 1; // How do I access my_variable?
console.log("HOORAY!");
},
error: function(error) {
console.log("ERROR");
}
});
}
}
在此代码中,我们var _this = this;
可以在_this
内访问$.ajax
,因为ajax请求位于my_function
,而_this
位于my_function
的本地范围内引用this
的{{1}}。现在,当您使用_this.my_variable
时,它将更改对象my_variable
的{{1}}
您的代码中的错误是您没有使用该函数绑定mylibrary
。您应该这样做以获得this
工作
bind
答案 3 :(得分:0)
您可以使用let _this = this
将父方法的范围指定给变量,并在内部函数中使用它。
mylibrary = {
my_variable: 0,
my_function: function() {
let _this = this;
$.ajax({
url: "/theinternet",
method: "POST",
data: {
// things
},
success: function(response) {
_this.my_variable += 1; // How do I access my_variable?
console.log("HOORAY!");
},
error: function(error) {
console.log("ERROR");
}
// }).bind(this); this doesn't work.
}).bind(this);
}
}