Доступ к массиву вне ajax-вызова? - PullRequest
0 голосов
/ 12 февраля 2019

все!У меня есть вызов 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 голосов
/ 12 февраля 2019

То, с чем вы здесь работаете, это javascript this «обзорные» правила.Контекст функции (по умолчанию) принимает контекст объекта, который ее вызывает (см .: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this).

Когда вы вызываете функцию success, вам необходимоbind контекст с тем, который вы хотите внутри функции:

success: function (res) {
 // do things ...
}.bind(this)

Удачи!

0 голосов
/ 12 февраля 2019

this здесь относится к объекту ajax .

this.mlsArray  = Object.assign([], res);

, где this здесь ниже относится к объекту окна, которыйимеет все глобальные свойства и методы.

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

1.Привязать значения к объекту окна, используя

success: function (res) {
 this.mlsArray  = Object.assign([], res);
 console.log(this.mlsArray);
}.bind(this)

или

сделать mlsArray глобальной переменной и не использовать ключевое слово .

success: function (res) {mlsArray = Object.assign ([], res);console.log (mlsArray);}

и в getHomes, как показано ниже

getHomes() {
  console.log(mlsArray);
 }
0 голосов
/ 12 февраля 2019

Вам следует присвоить значение из части success вашего вызова ajax в глобальную переменную, чтобы вы могли получить к ней доступ даже внутри функции main().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...