在ajax调用之外访问数组?

时间:2019-02-12 03:33:21

标签: javascript angular

全部!我有一个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);
 }
}

3 个答案:

答案 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)

  1. 将mlsArray用作全局变量,并避免使用 this 关键字。

    成功:功能(分辨率){      mlsArray = Object.assign([],res);      console.log(mlsArray);     }

以及下面的getHomes

getHomes() {
  console.log(mlsArray);
 }

答案 2 :(得分:-1)

您应该将ajax调用的success部分中的值分配给全局变量,以便即使在main()函数外部也可以访问它。