Jquery自动完成功能只有在刷新页面和/或发生随机事件之后才起作用

问题描述 投票:0回答:2

标题的歉意。

我有一个使用两个脚本的页面,它们都以相同的形式起作用。

这是一个自动保存的脚本(由于表单上有很多键入内容,我不希望用户丢失数据)。

<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>的页面开始处加载

php jquery ajax autosave
2个回答
1
投票

通过它的外观(并且没有运行过多的测试),您正在以同步方式运行代码。我的意思是说这句话:

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

由于服务器正在解析PHP脚本,因此阻止了其余代码的执行。不用为您的availableTags包含脚本,而是使用AJAX请求标签可用,例如:

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

应该可以解决问题。您能否详细说明view-job-q-em-search.php的内容?


0
投票

好,这是两件事的结合。首先,您完全正确,呼叫需要同步。

最大的问题...因为我每两秒钟自动保存一次,所以打开表单后,我立即保存了空白行。然后,自动完成查询试图用空白条目填充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数组添加空行。

© www.soinside.com 2019 - 2024. All rights reserved.