ivaaaan
@ivaaaan
PHP developer

Typeahead — как сделать динамическое обновление значений?

Есть код для typeahead
$("#select").change(function(){
			var getTypes = (function (){ 
				var types = null;
				$.ajax({
				//тут получаем новые значения types
				return types;
			})();

		var result = [];
    	for(var i = 0; i < getTypes.length; i++){
    		result.push(getTypes[i].store_name);
    	}
    			console.log(result);

    	$('#user_delivery_number').typeahead({
			hint: true,
			highlight: true,
			minLength: 3
			},

			{	
			name: 'states',
			displayKey: 'value',
			source: substringMatcher(result)
		});
});

При смене значений в typeahead они не обновляются. Т.е по умолчанию в result = ['aaa', 'xxx']. Потом после смены result = ['bbbb', 'ccccc'], а в typeahead остаются aaa и xxx. Как поправить?

UPD:
данные в result новые приходят 100%, console.log это показывает
  • Вопрос задан
  • 2563 просмотра
Пригласить эксперта
Ответы на вопрос 2
xoma2
@xoma2
Программист
localStorage чисти бротишка
Ответ написан
ivankomolin
@ivankomolin
К сожалению, вы не показали код ajax запроса, но все же рискну предположить что проблема в нем.
jQuery метод ajax() по умолчанию выполняется асинхронно, если не задать иное.
Поэтому ваш метод getTypes() скорее всего возвращает types раньше чем в него записывается результат выполнения http запроса.
Для возвращения именно результата запроса необходимо сделать что-то типа такого:
$.ajax({
....
}).done(function(types) {
  return types
});


чуть дальше прочитал код...
$('#user_delivery_number').typeahead() тоже может выполниться раньше чем закончится цикл for(var i = 0; i < getTypes.length; i++) и т.п.
Нужно взглянуть на код под другим углом и понять что js асинхронный)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы