为标题道歉。
我有一个使用两个脚本的页面,它们都在同一个表单上运行。
这是一个自动保存脚本(因为表单上有很多打字,我不希望用户丢失数据)。
<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数组的简单db查询。
然而,他们并没有很好地合作,而且他们做得很好。
有趣的是,如果我将单个字符输入到表单上的一个文本框中,然后刷新,则自动完成开始工作,但是当页面第一次加载时它不会。这就像是等待自动保存在autocompete开始之前执行其第一个动作时一直停滞不前。
我在Jquery中已经足够精通这些东西了,但还不足以发现异常情况,所以任何帮助或想法都可以做到这一点。
我还使用通用外部脚本jquery.min,jquery,ui,这些脚本在<head>
答案 0 :(得分:1)
通过它的外观(并且没有运行太多测试),您将以同步方式运行代码。我的意思是这句话:
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 :(得分: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);
...将!空子句放入查询中,以便它不会尝试将空行添加到json数组中。