Я строил пример кода для модуля Twitter Bootstrap Typeahead.Вытягивание внешнего JSON-файла в переменную javascript с помощью jQuery
В ранней версии версии сценария я включил следующее, снятое почти непосредственно из примера, с несколькими настройками, которые отлично работали;
$('.building_selector').typeahead({
source: function (query, process) {
buildings = [];
map = {};
var data = [{"buildingNumber":"1","buildingDescription":"Building One"},{"buildingNumber":"2","buildingDescription":"Building Two"},{"buildingNumber":"3","buildingDescription":"Building Three"}];
$.each(data, function (i, building) {
map[building.buildingDescription] = building;
buildings.push(building.buildingDescription);
});
process(buildings);
},
updater: function (item) {
selectedBuilding = map[item].buildingNumber;
return item;
},
});
На практике это не так много использования в то время как у меня есть множество вариантов, написанных непосредственно в коде, так что я смотрел на чтение внешний файл с JSON, написанный на. Я ve создал файл, содержащий только массив следующим образом;
[{"buildingNumber":"1","buildingDescription":"Building One"},
{"buildingNumber":"2","buildingDescription":"Building Two"},
{"buildingNumber":"3","buildingDescription":"Building Three"}]
И теперь я попытался обновить Javascript, чтобы включить код для загрузки удаленного файла. Я могу проверить, существует ли файл и находится в правильном относительном местоположении.
$('.building_selector').typeahead({
source: function (query, process) {
buildings = [];
map = {};
var data = function() {
$.ajax({
'async': false,
'global': false,
'url': "../json/buildings",
'dataType': "json",
'success': function (result) {
data = result;
}
});
return data;
}();
$.each(data, function (i, building) {
map[building.buildingDescription] = building;
buildings.push(building.buildingDescription);
});
process(buildings);
},
updater: function (item) {
selectedBuilding = map[item].buildingNumber;
return item;
},
});
На запуске страницы, все элементы по всей видимости, работать, как ожидалось, и ничего не появляется в консоли, пока не будет нажата кнопка внутри текстового поля и будучи типизации. После каждого нажатия клавиши ничего не происходит, но в консоли создается следующее:
Uncaught TypeError: Cannot read property 'length' of undefined [jquery.min.js:3]
Любые идеи/мысли/отправные точки, чтобы исправить это, были бы очень признательны!
'async ': false,' is bad ... и устарело. Переместите код так: «процесс (здания)», 'находится в обратном вызове' success'. Не уверен, допустимо, но если json-файл является статическим, он может включать его в тег скрипта на странице и пропускать с помощью AJAX. Просто добавьте 'var myBuildingData =' перед массивом и обработайте эту переменную в 'source' функции – charlietfl