Задать вопрос
mcmraak
@mcmraak
php+sql+js+bicycle+crutches

Как сделать последовательное выполнение в данном случае?

Добрый день! В одном своем проекте я решил немного упростить работу с AJAX запросами, и написал простую оболочку. https://github.com/mcmraak/ion
Заранее извините за документацию, уж как смог, буду допиливать...

Позже оказалось, что она довольно удобная благодаря самой идее, когда все необходимые действия пишутся в одном атрибуте, который например вешается на событие клика на элемент с этим атрибутом. Например если я хочу сделать ajax-запрос к определённому URL и полученный ответ вставить в определённый элемент то набор команд в этом атрибуте выглядит так: "ajax=/ajax/url;html=#Container;"
var ion = new Ion();
ion.preloaderSelector = '#Preloader';

$(document).on('mousedown', '[ion]', function (){
    ion.cmd($(this).attr('ion'));
});

<button ion="ajax=/ajax/url;html=#Container;" >Сделать хорошо!</button>
<div id="Container"></div>


Мне понравилась данная идея, потому что это быстро и мало кода. Не нужно задумываться о повторном привязывании обработчиков.

Далее я начал дорабатывать эту оболочку и функционал вырос. Например теперь можно собирать данные с форм и элементов, вызывать модальное окно, автоматически появляется прелоадер, можно отправлять данные в консоль, перезагружать страницу с временной задержкой, забирать get-параметры и т.д. и т.п.

Но на этом мои познания в JS закончились, а мне хотелось бы реализовать следующее:
например сейчас можно написать “ajax=/ajax/url;html=#Container;->run=alert('я опять вне очереди')” символ -> разделяет набор команд на два этапа, т.е. с начала должно выполниться ajax=/ajax/url;html=#Container; а потом run=alert('я опять вне очереди') в коде это реализовано естественно топорно и выполняется асинхронно:

Вот тут, в начале отсекается первая часть набора команд:
var acArr = ac.split('->');
        var acNext = false;
        if (acArr.length > 1) {
            ac = acArr[0];
            acArr.splice(0, 1);
            acNext = acArr.join('->');
        }


А вот тут в конце функция рекурсирует запуская сама себя
/* Next command */
        if(acNext) {
            this.cmd(acNext);
        }


Естественно никакой последовательностью тут и не пахнет, потому что это JavaScript а я обычный php-шник с бекендов, тут надо калбеки или промисы.

Как это можно реализовать?

P.S. В общем по сути я прошу помощи в допиливании этого хозяйства, если вам интересно, ведь это может реально упростить фронтенд-разработку для JavaScript нубов, посмотрите код и возможно идея вам понравится и вы присоединитесь. Я не то что-бы уже слишком стар для всего это дер... а просто нет времени резко повысить квалификацию, а перестать пользоваться этой штукой уже не могу, уж больно удобно...
  • Вопрос задан
  • 292 просмотра
Подписаться 1 Оценить 18 комментариев
Решения вопроса 1
mcmraak
@mcmraak Автор вопроса
php+sql+js+bicycle+crutches
В общем я всё понял, ошибку свою признал, буду сам допиливать потихонечку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы