AJAX запрос выполняется несколько раз подряд

Главные вкладки

Аватар пользователя igoroshkov igoroshkov 19 июня 2014 в 16:36

Добрый день.

Навесил на селект вне формы ajax-обработчик (через ajax framework). Все работает, но при изменении селекта ajax выполняется несколько раз подряд. Более того, когда первый раз выбираешь селект, запрос выполняется один раз. Когда выбираешь второй раз - запрос выполняется 2 раза. Когда выбираешь третий раз - запрос выполняется 4 раза, когда четвертый раз - 8 раз выполняется.

Подскажите, пожалуйста, в чем может быть проблема.

Комментарии

Аватар пользователя Orion76 Orion76 19 июня 2014 в 18:31

Похоже они размножаются..
Почкованием врядли..
Скорее всего делением..

Для серьезного ответа недостаточно данных.

Аватар пользователя Koreychenko Koreychenko 20 июня 2014 в 11:56

Дык сколько раз твердили миру. Навешивать через jquery.once();

После того, как выполняется callback на ваш AJAX запрос, обработчик на ваш селект навешивается еще один раз. И т.д. Поэтому нужно использовать конструкции вида

$('selector').once().change(function(){
Ваш AJAX вызов.
});

Аватар пользователя igoroshkov igoroshkov 1 июля 2014 в 14:36

Насколько я понял, то, что внутри jquery.once выполняется один раз. При каждом изменении селекта на странице мне внутрь jquery.once нужно передавать текущее значение этого селекта. Это можно как-то реализовать?

jQuery('select.choose-currency', context).once('ajax', function () {
var base = 'select#edit-price';
Drupal.ajax[base] = new Drupal.ajax(base, this, {
event: 'change',
url: Drupal.settings.basePath + '/changepriceselect?currency=' + jQuery(this),
});
});

jQuery(this) - все время одно и то же значение, то, которые было при загрузке страницы.