У меня есть приложение Ruby on Rails 4.2.Rails UJS: прервать ранее запущенные, но все еще активные запросы ajax при запуске нового запроса ajax
У меня есть 3 кнопки, которые вызывают AJAX запросы с Rails UJS
<section id="buttons">
<%= link_to image_tag(image),
button1_modal_path,
remote: true,
id:"icon1",
data: { disable_with: '' } %>
<%= link_to image_tag(image),
button2_modal_path,
remote: true,
id:"icon2",
data: { disable_with: '' } %>
<%= link_to image_tag(image),
button3_modal_path,
remote: true,
id:"icon3",
data: { disable_with: '' } %>
</section>
Я хотел бы реализовать следующую схему:
пользователь нажимает на кнопку 1 начинает запрос AJX XHR (пусть (s назовите его ajaxRequest1)
ajax все еще обрабатывается (и независимо от того, в каком состоянии он включен: отправлено, уже обработано сервером, на нем обратно) ... но не имеет t прибыл (200), и пользователь нажимает кнопку 2, запуская другой запрос xhr ajax (ajaxRequest2)
Я хотел бы в этом случае, чтобы все остальные активные запросы ajax (то есть в этом случае ajaxRequest1) были отменены. Если там было больше, чем только один больше запросов, было бы отменить их все, кроме запроса последнего АЯКСА (т.е. ajaxRequest2)
Я попытался это с помощью Rails UJS ajax events, но он не работает (он фактически отменяет любой Аякс запрос срабатывать :(:
on('ajax:beforeSend',function(event, xhr, settings){
xhr.onreadystatechange = null;
xhr.abort();
}
ПРИМЕЧАНИЕ: Я хотел бы, в лучшем случае, что я не только отменить тот факт, что браузер ожидает возвращения запроса Ajax и отобразить его содержимое, но также, что если запрос был запущен, но еще не попал на сервер, он отменяется до того, как он попал на сервер, чтобы не перекрывать oad сервер с бесполезным запросом ajax.