@ArtGMlg

Jquery autocomplete выдает ошибку?

При нажатии на кнопку инициализируется функция, которая отправляет на node.js express get запрос, который в ответ присылает массив с названиями городов, массив состоит из 10969 элементов ["Москва", "Абрамцево", "Алабино", "Апрелевка", "Архангельское", "Ашитково", "Байконур", "Бакшеево", "Балашиха", "Барыбино", "Белоомут", "Белые Столбы", "Бородино", "Бронницы", "Быково", "Валуево", "Вербилки", "Верея", "Видное", "Внуково", "Вождь Пролетариата" …].
var citiesList;

function loadCitiesNames() {
  $.ajax({
    url: "http://localhost:3000/cities/get",
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
      citiesList = data;
      console.log(citiesList);
    },
    error: function(request,msg,error){
      console.log(request + ' ' + msg + ' ' + error);
    }
  });
}

Так соответственно выглядит серверная часть
router.get('/get', function(req, res, next) {
	res.header("Access-Control-Allow-Origin", "*");
	res.header("Access-Control-Allow-Headers", "X-Requested-With");
	res.contentType('json');
	res.setHeader('Content-Type', 'application/json');
  var data = JSON.parse(fs.readFileSync('cities.json'),'utf8');
  var cities = data.city;
  var citiesNames = [];
  for (var i = 0; i < cities.length; i++) {
  	citiesNames.push(cities[i].name);
  }
	res.jsonp(citiesNames);
});

module.exports = router;


Затем этот массив записывается в переменную, которая и служит источником для autocomplete.
$('#cityInput').autocomplete({source: citiesList, appendTo: this})


Сам инпут находится в модальном окне, которое кнопка вызывает
<div class="modal fade" id="weaModal" tabindex="-1" role="dialog" aria-labelledby="weaModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="weaModalLabel">Выберите город:</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
      	<input id="cityInput" class="form-control" type="text" placeholder="Введите название города">
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
        <button type="button" class="btn btn-primary">Сохранить</button>
      </div>
    </div>
  </div>
</div>


При попытке ввода в инпут чего-либо в консоли возникает такая ошибка:
jquery-ui.js:6015
Uncaught TypeError: this.source is not a function
at $..._search (jquery-ui.js:6015)
at $..._search (jquery-ui.js:144)
at $...search (jquery-ui.js:6007)
at $...search (jquery-ui.js:144)
at $... (jquery-ui.js:5988)
at handlerProxy (jquery-ui.js:641)

На странице подключены:
<script src="https://code.jquery.com/jquery-3.5.0.min.js" integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js" integrity="sha256-T0Vest3yCU7pafRw9r+settMBX6JkKN06dqBnpQ8d30=" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="./css/jquery-ui.css">
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
@ArtGMlg Автор вопроса
Ответ найден!!
Чтобы autocomplete заработал нужно было инициализировать его тогда, когда приходил успешный ответ с сервера
function loadCitiesNames() {
  $.ajax({
    url: "http://localhost:3000/cities/get",
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
      setAutocomplite(data);
    },
    error: function(request,msg,error){
      console.log(request + ' ' + msg + ' ' + error);
    }
  });
}

function setAutocomplite(data){
  $('#cityInput').autocomplete({source: data, appendTo: $('#modalBody')})
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
Rocket Брянск
от 60 000 до 100 000 ₽
22 мая 2024, в 02:15
10000 руб./за проект
21 мая 2024, в 23:47
30000 руб./за проект