全部!我有一个ajax调用来获取API的结果。当我尝试在调用之外访问该数组时,它为空。救命?
在下面的代码中,我获得了属性列表,然后将结果分配给“ mlsArray”变量。当我在main中控制台记录它时,我得到了预期的结果。
但是,如果以后再调用getHomes,则该数组为空。
main(auth) {
$.ajax({async: false,
url: "https://api.simplyrets.com/properties?
limit=500&lastId=0&status=active&maxprice=" +
this.maximum + "&type=residential",
type: 'GET',
dataType: 'json',
// authorize with the API credentials
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + auth);
},
success: function(res) {
this.mlsArray = Object.assign([], res);
console.log(this.mlsArray);
}
});
}
getHomes() {
console.log(this.mlsArray);
}
}
答案 0 :(得分:0)
您在这里处理的是javascript this
“范围”规则。函数的上下文(默认情况下)采用调用该函数的对象的上下文(请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)。
调用函数success
时,需要将bind
的上下文与函数中想要的上下文进行关联:
success: function (res) {
// do things ...
}.bind(this)
祝你好运!
答案 1 :(得分:0)
这里的 this 指的是ajax object 。
this.mlsArray = Object.assign([], res);
其中下面的 this 是指具有所有全局属性和方法的window对象。
getHomes() {
console.log(this.mlsArray);
}
1。使用
将值绑定到窗口对象success: function (res) {
this.mlsArray = Object.assign([], res);
console.log(this.mlsArray);
}.bind(this)
或
将mlsArray用作全局变量,并避免使用 this 关键字。
成功:功能(分辨率){ mlsArray = Object.assign([],res); console.log(mlsArray); }
以及下面的getHomes
getHomes() {
console.log(mlsArray);
}
答案 2 :(得分:-1)
您应该将ajax调用的success
部分中的值分配给全局变量,以便即使在main()
函数外部也可以访问它。