0
function get_users ()
{
    let users;
    $.ajax({
        url: "http://blog.good-electric.ru/config/users.php",
        method: "GET",
        complete: function(xhr, status) { console.log(status, xhr); }
    }).done(function (data) {
        users = data;
    });
    return users;
}

complete возвращает status_code - error, подскажите пожалуйста где ошибка?

  • подскажите пожалуйста где ошибка? - без точного текста ошибки нельзя сказать. Либо на сервере, либо не клиенте :) – Grundy Mar 17 '19 at 10:32

1 Answers1

-1

Ваша функция get_users асинхронная, а это значит, что переменная users в ней при return, всегда будет undefined.

Сделать функцию синхронной можно несколькими способами.

Методом конструктора Promise:

function get_users() {
    return new Promise((resolve, reject) => {
      $.ajax({
        url: "http://blog.good-electric.ru/config/users.php",
        method: "GET",
        success: resolve,
        error: reject
      })
    })
}

get_users() .then(data => console.log('success', data)) .catch(err => console.log('err', err))

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Методом callback-а:

function get_users(success, error) {
  $.ajax({
    url: "http://blog.good-electric.ru/config/users.php",
    method: "GET",
    success: success,
    error: error
  })
}

get_users(data => { consoe.log('success', data) }, err => { console.log('err', err) })

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
mix
  • 2,593
  • но ведь в вопросе спрашивается про вывод console.log: complete: function(xhr, status) { console.log(status, xhr); } который выводит status_code - error – Grundy Mar 17 '19 at 10:29
  • если бы вопрос был про значение users, то стоило бы проголосовать за закрытие в качестве дубликата: Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания – Grundy Mar 17 '19 at 10:30
  • функция get_users сама по себе не будет работать, если не решить вопрос с асинхронностью. А ошибка может возникать из-за CORS – mix Mar 17 '19 at 10:32
  • get_users - сама по себе отлично работает. И судя по тому, что приходит статус - скорее всего ошибка на сервере, а не cors, но без текста ошибки ничего нельзя сказать, возможно это попытка привести невалидный json к объекту упала – Grundy Mar 17 '19 at 10:34
  • Сделать функцию синхронной можно несколькими способами - ни один из приведенных способов НЕ делает функцию синхронной – Grundy Mar 17 '19 at 10:34
  • @Grundy return не может работать, как изначально планировал автор, поскольку, как и писал я в своем ответе, return возвращает undefined – mix Mar 17 '19 at 10:35
  • и мы возвращаемся к тому, что вопрос совсем не об этом. А если бы был об этом, то просто стоило проголосовать за дубликат. – Grundy Mar 17 '19 at 10:37
  • возможно, но это не делает мой ответ неверным. как найти дубликат? – mix Mar 17 '19 at 10:38
  • Делает :-) потому что он не отвечает на поставленный вопрос. И если бы не объем, то можно было бы преобразовать его в комментарий. – Grundy Mar 17 '19 at 10:38
  • он отвечает на вопрос, который придет по решению текущего вопроса - а не прийти он не может – mix Mar 17 '19 at 10:39
  • Вот когда придет - тогда и надо будет его решать. – Grundy Mar 17 '19 at 10:40
  • как найти дубликат? – mix Mar 17 '19 at 10:40
  • если в вопросе ошибка, то нужно указать автору на нее, а не ждать, пока создастся новый вопрос. смысла в этом нету – mix Mar 17 '19 at 10:41