javascript — Дизайн: установка источника заголовка в зависимости от ответа Ajax

Я делаю что-то ужасное и знаю это, но не знаю, как избежать этой проблемы.

У меня есть 3 json-файла, 2 с правильными данными и 1, который просто пуст — просто мне нужен действительный json-файл, который ничего не загружает. На моем сайте у меня есть Twitter Typeahead контроль. При загрузке исходников для моего Typeahead мне иногда нужно установить и то и другое действительные файлы json, упомянутые выше в качестве источников, и иногда мне нужно включать только один из допустимых файлов, а затем второй источник устанавливается для загрузки пустого файла.

Вот код:

// Typeahead setup
$(function() {

/*
* TODO: This is synchronous, so not ideal.
*/
var sourceTwoUrl = "data/empty.json";
$.ajax({url: "isSourceTwoUserEnabled.php", async: false,
success: function(data) {
if (data == '1') {
sourceTwoUrl = "data/source2.json"}
}
});

// Setup and instantiate the Bloodhound suggestion engine for source 1
var sourceOne = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: 'data/source1.json'
}
});
sourceOne.initialize();

// Setup and instantiate the Bloodhound suggestion engine for source 2 results,
// using whichever json file was determined above (empty or valid source2.json)
var sourceTwo = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
cache: false,
ttl: 1,
url: sourceTwoUrl
}
});
sourceTwo.initialize();

// Instantiate the actual typeahead control with the 2 data sources loaded above
$('#search .typeahead').typeahead({
highlight: true,
hint: true,
minLength: 2
},
{
name: 'sourceOne',
source: sourceOne,
limit: 12
},
{
name: 'sourceTwo',
source: sourceTwo,
limit: 6
}
);

});

Сейчас это работает отлично, однако я знаю, что синхронный вызов плохой (и устарел), и поэтому я хотел бы избежать его, если это возможно. Следовательно, причина этого довольно ужасна — это async: false в моем вызове ajax. Я знаю, что синхронные вызовы могут привести к ухудшению взаимодействия с пользователем, но, опять же, если пользовательский интерфейс и Typeahead загружаются, прежде чем я получу результат isSourceTwoUserEnabled.php, он использует файл empty.json каждый раз, и поэтому мы никогда не видим результатов из source2.json.

Итак, как лучше это сделать?

Заметка, Ничего страшного, если source2.json не использовался в первый раз после того, как пользователь включил его; если лучший дизайн приводит к тому, что Typeahead не будет иметь source2.json до 2-го раза, когда они загрузят его после включения, это приемлемо.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]