Добрый день! В одном своем проекте я решил немного упростить работу с 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 нубов, посмотрите код и возможно идея вам понравится и вы присоединитесь. Я не то что-бы уже слишком стар для всего это дер... а просто нет времени резко повысить квалификацию, а перестать пользоваться этой штукой уже не могу, уж больно удобно...