JQuery автозаполнение не собирая массив - PullRequest
0 голосов
/ 03 мая 2018

Я создаю сайт. На сайте у меня есть поисковая форма, которая должна использовать автозаполнение для поиска данных в базе данных. Бэкэнд-часть готова, но передняя часть я не могу заставить его работать. Я нашел этот пост: Можно ли изменить URL, который генерирует JQuery JQueryUI Autocomplete? , но похоже, что ответ не используется в строке поиска.

Моя веб-страница работает только локально, поэтому я не могу показать ее, но у меня есть код (некоторые части, такие как doctype и заголовок, оставлены для легкого чтения):

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

</head>
<body>
<div class="ui-widget">
    <label for="country-by-name">Country: </label>
    <input id="country-by-name">
</div>
<script type="text/javascript">
$("#country-by-name").autocomplete({
    source: function(req, resp){
                $.get('/data/country/by-name/'+ encodeURIComponent(req.term), function(json){
                    var numCountries = json['countries'].length;
                    if(numCountries > 0){
                        var countryNames = [];
                        for(var i = 0; i < numCountries; i++){
                            countryNames.push(json['countries'][i]['name']);
                        }
                        resp = countryNames;
                        console.log(resp);
                    }else{
                        resp = [];
                    }
                    return resp;
                });
            },
    minLength: 2
});
</script>

Бэкэнд работает нормально, если я, например, захожу по адресу: / data / country / by-name / zi, то он возвращает json:

{"countries": [{"id": 812, "name": "Brazil"}, {"id": 995, "name": "Swaziland"}, {"id": 1033, "name": "Zimbabwe"}]}

Это также принимается javascript, потому что если я console.log (), он обнаруживается:

(3) ["Brazil", "Swaziland", "Zimbabwe"]

Итак, данные есть, но они не собраны функцией автозаполнения jquery. У кого-нибудь есть идея, почему «респ» не используется для автозаполнения?

1 Ответ

0 голосов
/ 03 мая 2018

Решил проблему. Я не осознавал, что «resp» является функцией обратного вызова Так что я должен был использовать респ (countryNames)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...