jQuery дождитесь завершения функции перед новыми пожарами - PullRequest
1 голос
/ 21 марта 2020

У меня есть две функции в jQuery, которые я хочу запустить в определенном порядке c. Первая функция - это функция ajax, которая обновляет частичное представление. Предполагается, что другой будет выполнять стилизацию в частичном представлении после завершения функции ajax - эта функция принимает параметр.

ajaxFunction();
stylingFunction(params);

Я пробовал следующее:

ajaxFunction(function() {
    stylingFunction(params)
});

Кроме того, я пытался использовать обратный вызов:

ajaxFunction(stylingfunction(params));

ajaxFunction(callback)
{
    //Do update
    callback()
}

Однако ни один из них не работает. Стиль появляется вскоре после того, как он исчезает, потому что обновляется частичное представление. Куда я здесь не так?

Обе функции написаны в моем «родительском» представлении.

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Вы можете использовать .done () и .fail (), связанные с вызовом $. ajax ...

Я создал пару функций обратного вызова с псевдо-кодом внутри successCallback (), так как вы сказал, что вам нужно только запустить функцию стилизации "иногда". Вы захотите протестировать любое условие внутри этой функции, чтобы определить, хотите ли вы запустить функцию стилизации. Надеюсь это поможет.

(function($) {
  $(function() {   //document.ready

    $.ajax({ cache: false,
        url: "/blah/vlah/lah",
        data: { somedata: somedata }
    })
    .done(successCallback)
    .fail(failCallback);

  });

    function successCallback(data) {
        if (someCondition) {
            stylingFunction(params);
        }
    };

    function failCallback(jqXHR, status, error) {
        console.log(jqXHR);
        console.log(error);
        console.log(status);
    };

})(jQuery);

Я создал еще одну суть, которая обрабатывает делегирование событий ajax, вы можете рассмотреть и включить все, что может оказаться полезным в вашей ситуации. https://gist.github.com/inceptzero/a753d020648f49da90f8

Я также создал этот гист на github для очереди запросов ajax, которая более элегантна и надежна. https://gist.github.com/inceptzero/e64756f9162ca6aeeee5

0 голосов
/ 21 марта 2020

Поскольку вы используете jQuery, вы можете const ajaxFunc = callback => $.ajax({...}).done( data => callback) Также вы можете использовать async / await. Вы можете прочитать больше об этом на MDN .

...