Извиняюсь за название.
У меня есть страница с использованием двух сценариев, которые действуют в одной форме.
Это скрипт автосохранения (так как в форме много набирается текста, я не хочу, чтобы пользователи теряли данные).
<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>
Судя по всему (и без запуска слишком большого количества тестов), вы выполняете свой код синхронно. Я имею в виду, что это утверждение:
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
?
ОК, это была комбинация двух вещей. Во-первых, вы были совершенно правы, звонок должен быть синхронным.
Большая проблема …
Поскольку я самосохранял каждые две секунды, как только я открывал форму, я сохранял пустую строку. Затем запрос автозаполнения пытался заполнить массив 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.