Как использовать область применения или выполнения функций в случае успеха в Angular 8 jQuery ajax? - PullRequest
0 голосов
/ 06 февраля 2020

По причинам, по которым я не буду здесь вдаваться, я использую jQuery ajax вместо Angular http. Поэтому я делаю ajax звонок на мой php сервер. Однако одна проблема заключается в том, что в случае успеха или ошибки все, что выполняется в блоках успеха / ошибки, ограничено ими. Я не могу получить код для взаимодействия с любыми другими переменными или функциями вне вызова ajax.

Я видел в потоке AngularJS, что я должен запустить $ scope.apply, однако $ scope не существует для Angular jQuery, очевидно.

Вот мой код:

jqueryAjaxEngine (prockey, sData) {

const DATA = 'prockey=' + prockey + sData;

console.log(DATA);
$.ajax({
  data:     DATA,
  url:      this.controllerUrl,
  dataType: 'JSON',
  type:     'POST',

    beforeSend: function(m) {
      if (m && m.overrideMimeType) {
        m.overrideMimeType('application/json;charset=UTF-8');
        }
    },

    success: function(data) {

      console.log(data);

      // the this.returnData is constricted to within this block, after this block 
      // this.returnData is null
      this.returnData = data;

      console.log(this.returnData);
      this.succStatus = data.status;
      // They tell me that setSwitch does not exist, however it is a function on my file
      this.setSwitch(prockey, data);

    },
    error: function (xhr, status, errorThrown) {
      console.log(xhr);
      this.returnData = xhr;
      console.log(this.returnData);
      this.succStatus = xhr.status;
  }
});
// this.setSwitch(data)

console.log(this.returnData);
return this.returnData;};

1 Ответ

0 голосов
/ 06 февраля 2020

Это из-за проблем с областями видимости. В es6 вы можете использовать функцию стрелки, которая облегчит вашу жизнь, то есть this будет ссылаться на внешнюю область, из которой была вызвана функция стрелки. Поэтому вы должны написать свой код следующим образом:

 success: data => {

  console.log(data);

  // the this.returnData is constricted to within this block, after this block 
  // this.returnData is null
  this.returnData = data;

  console.log(this.returnData);
  this.succStatus = data.status;
  // They tell me that setSwitch does not exist, however it is a function on my file
  this.setSwitch(prockey, data);

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