Автозаполнение JQuery не работает до тех пор, пока после обновления страницы и / или случайного события

Извиняюсь за название.

У меня есть страница с использованием двух сценариев, которые действуют в одной форме.

Это скрипт автосохранения (так как в форме много набирается текста, я не хочу, чтобы пользователи теряли данные).

<script rel="text/javascript">
$(function () {
$.post("autosave.php", "json");
setInterval(function () {
$.post("autosave.php", $("form").serialize());
}, 2000);
});
</script>

Который работает хорошо. autosave.php — это не что иное, как простой запрос к базе данных, обновляющий различные поля из данных POST, получаемых из формы.

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

<script rel="text/javascript">
$(function() {
var availableTags = <?php include('view-job-q-em-search.php'); ?>;
$("#sendy_to").autocomplete({
source: availableTags,
autoFocus:true
});
});
</script>

Это также хорошо работает, PHP-скрипт в этом опять-таки представляет собой простой запрос базы данных, возвращающий массив json.

Тем не менее, они не очень хорошо работают вместе, хорошо они делают, в моде.

Интересно, что если я введу хотя бы один символ в одно из текстовых полей формы, а затем обновится, автозаполнение начнет работать, но не произойдет, когда страница загружается в первый раз. Это похоже на то, как будто он застрял в ожидании, пока автосохранение выполнит свое первое действие, прежде чем включится автоконкурент.

Я достаточно разбираюсь в Jquery, чтобы заставить все это работать, но еще недостаточно хорош, чтобы обнаружить аномалию, поэтому любая помощь или идеи, чтобы сделать эту работу, были бы великолепны.

Я также использую общие внешние скрипты jquery.min, jquery, ui, которые загружаются в начале страницы в <head>

0

Решение

Судя по всему (и без запуска слишком большого количества тестов), вы выполняете свой код синхронно. Я имею в виду, что это утверждение:

var availableTags = <?php include('view-job-q-em-search.php'); ?>;

предотвращает выполнение остальной части кода, так как он анализирует PHP-скрипт.
Вместо того, чтобы включать скрипт для ваших доступных тегов, используйте AJAX для запроса тегов
доступно, например:

var availableTags;
$.get( "tags/getAvailable", function( data ) {
availableTags = data;
$("#sendy_to").autocomplete({
source: availableTags,
autoFocus:true
});
});

это должно решить проблему. Не могли бы вы уточнить содержание view-job-q-em-search.php?

1

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

ОК, это была комбинация двух вещей. Во-первых, вы были совершенно правы, звонок должен быть синхронным.

Большая проблема …
Поскольку я самосохранял каждые две секунды, как только я открывал форму, я сохранял пустую строку. Затем запрос автозаполнения пытался заполнить массив json пустой записью, и ему это не понравилось.

Обходной путь должен был просто добавить …

$dname_list = array();
while($row = mysqli_fetch_array($result))
{
if(!empty($row['sent_to'])){
$dname_list[] = $row['sent_to'];
}

}
echo json_encode($dname_list);

… предложение! empty в запрос, чтобы он не пытался добавить пустые строки в массив json.

0