как использовать return $ .post - undefined не является объектом (оценка 'function (). then') - PullRequest
1 голос
/ 06 февраля 2020

Я хотел бы вернуть некоторые данные из файла PHP, используя $.post(). $.post -метод находится внутри оператора if, поэтому он не возвращается каждый раз, когда вызывается функция. Вот код для лучшего понимания:

function abc() {
    ...
    ...

    function def() {
      if (a === 1) {
          // if a equals 1 it works as expected
          return $.post('file.php', formData, function(result) {}); 
      } else {
          // return $.post(); // returns whole page
    }

    def().then(function(result) { // this should be fired too if nothing returns
        console.log(result);
        ...
    });
} 

1 Ответ

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

Есть несколько способов решить эту проблему. Во-первых, вы можете изменить свою логику c, чтобы функция def() всегда выполняла запрос AJAX. Затем вам просто нужно переместить условие if за его пределы:

function abc() {
  // some code...

  function def() {
    return $.post('file.php', formData, function(result) {});
  }

  if (a === 1) {
    def().then(function(result) {
      console.log(result);
      // some code...
    });
  }
}

Это, очевидно, делает сам def() довольно избыточным.

Другой подход - вернуть пустое, разрешенное обещание из условия else. Вы можете использовать $.when для этого:

function abc() {
  // some code...

  function def() {
    if (a === 1) {
      return $.post('file.php', formData, function(result) {});
    } else {
      return $.when(null);
    }

    def().then(function(result) {
      console.log(result);
      // some code...
    });
  }
}
...