标题的歉意。
我有一个使用两个脚本的页面,它们都以相同的形式起作用。
这是一个自动保存的脚本(由于表单上有很多键入内容,我不希望用户丢失数据)。
<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脚本,因此阻止了其余代码的执行。不用为您的availableTags包含脚本,而是使用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数组添加空行。