Самый простой способ - вызывать функцию только после завершения функции ajax-запроса - обратный вызов, обещание - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть две вложенные функции, подобные этой:

var userhascompany;

$(document).ready(function(){

    checkforcompany();


        if (Object.keys(localStorage).length > 0) {

            getaddjobcache();

        }

    });

Функция checkforcompany(); выглядит следующим образом:

$.ajax({

    url: 'addjob_companycheck.php',
    success: function(dataresponse) {

        userhascompany = dataresponse;

    }

}); 

Функция getaddjobcache(); должна вызываться только тогда, когда переменная userhascompany имеет значение или, скорее, запрос ajax завершен.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Измените checkforcompany(), чтобы получить jqXHR, созданный $.ajax(), так как он реализует интерфейс затем .Я рекомендую использовать jQuery 3.x для согласованного поведения обещания , но если вам нужно использовать более старую версию, вы обычно можете обойтись без преобразования в вызов Promise.resolve(), чтобычтобы привести поведение к соответствию обещанию.

function checkforcompany () {
  return $.ajax({
    url: 'addjob_companycheck.php'
  });
}

$(() => {
  checkforcompany().then(dataresponse => {
    const userhascompany = dataresponse;

    if (Object.keys(localStorage).length > 0) {
      getaddjobcache(userhascompany);
    }
  });
});

Также не полагайтесь на глобальные переменные для передачи значений между контекстами.Вместо этого getaddjobcache() примите userhascompany в качестве параметра, как показано выше.

Наконец, jQuery рекомендует $() вместо $(document).ready().

1 голос
/ 16 апреля 2019

Есть два подхода, для этого используется callback functions другой использует .then block или async-await

Использование функции обратного вызова

var userhascompany;
$(document).ready(function(){
    checkforcompany();
});

function checkforcompany(){
    $.ajax({
        url: 'addjob_companycheck.php',
        success: function(dataresponse) {
            userhascompany = dataresponse;
            if (Object.keys(localStorage).length > 0) {
                getaddjobcache();

            }
        }

    });
}

Используя обещание .then

var userhascompany;
$(document).ready(function(){
    checkforcompany()
    .then(function(dataresponse){
        userhascompany = dataresponse;
        if (Object.keys(localStorage).length > 0) {
            getaddjobcache();

        }
    })
});

function checkforcompany(){
    return new Promise(function(resolve, reject){
        $.ajax({
            url: 'addjob_companycheck.php',
            success: function(dataresponse) {
               resolve(dataresponse)
            }
            error: function(err) {
               reject(err)
            }
        });
    })
}

Использование jQuery ajax .done

var userhascompany;
$(document).ready(function(){
    checkforcompany()
    .done(function(dataresponse){
        userhascompany = dataresponse;
        if (Object.keys(localStorage).length > 0) {
            getaddjobcache();

        }
    })
});

function checkforcompany(){
    return $.ajax({
            url: 'addjob_companycheck.php',
        });
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...