这是我的php文件。我想为我的文本框自动建议,但它不起作用。我有3-4个自动建议来源。
<?php
$con =mysqli_connect("due connectn attributes");
$return_arr = array();
$search = mysqli_real_escape_string($_GET["term"]);
if (!$search) return;
$sql = "SELECT PName, PNo FROM PlayerDetails WHERE PName LIKE '%$search%'";
$sql = mysqli_query($sql);
while ($row = mysqli_fetch_assoc($sql)){
$row_array['PNo'] = $row['PNo'];
$row_array['PName'] = $row['PName'];
//echo "$PName|$PNo'n";
array_push($return_arr, $row_array);
/* Toss back results as json encoded array. */
echo json_encode($return_arr);
}
mysqli_close($con);
?>
javascript部分:
<script src="/_js/jquery-2.1.3.min.js"></script>
<script src="/_js/jquery-ui.min.js"></script>
<script>
$(document).ready(function() {
$("#auto").autocomplete({
source: "../_php/search.php",
autoFocus:true
}
});
}); //end READY
</script>
HTML部分是:
<p>
<label for="Username">Username:</label>
<input type="text" name="auto" id="auto">
</p>
您有一个语法错误:
$(document).ready(function() {
$("#auto").autocomplete({
source: "../_php/search.php",
autoFocus:true
}); //<----should be closed like this.
});
您不能生成多个JSON编码;这不会得到有效的JSON,jQuery将忽略它。
while ($row = mysqli_fetch_assoc($sql)) {
$row_array['PNo'] = $row['PNo'];
$row_array['PName'] = $row['PName'];
array_push($return_arr, $row_array);
/* Toss back results as json encoded array. */
echo json_encode($return_arr);
}
echo json_encode($return_arr);
必须在mysqli_close
:之后仅发生一次
array_push($return_arr, $row_array);
}/*将结果作为json编码的数组返回*/echo json_encode($return_arr);
另外,为了以防万一,输出JSON内容类型头:
}
/* Toss back results as json encoded array. */
Header("Content-Type: application/json; charset=UTF-8");
die(json_encode($return_arr));
最后,你在评论中报告了这个错误:
<b>Warning</b>: include() [<a href='function.include'>function.include</a>]: Failed opening '../_php/search.php' for inclusion (include_path='.:/usr/local/php-5.3.29/share/pear')
这个错误只能由一件事引起:您必须包括来自PHP的search.php
脚本。也就是说,在你的一些PHP脚本中有一个
include '../_php/search.php';
不能这样做——search.php
必须是一个独立的PHP脚本,如果你从这样的浏览器调用它的URL,它应该返回一个有效的JSON:
http://<yoursite>/_php/search.php?term=%
即,它应该返回类似的东西
[["PnoNumber1":"PNameNumber1"],["PnoNumber2":"PNameNumber2"]]
文件组织(有多种方法)
HTML文件可以放在你想要的任何地方,比如说它在/HTML/page.HTML 中
这个文件包括必需的JS代码,这些代码存在于/_JS,所以/_JS/jquery.min.JS等等
PHP是由HTML中的Javascript代码调用的,如另一个答案中所述。当您在Javascript中包含"search.php"URL时,这将生成一个新的浏览器调用,它在AJAX中有自己的生命周期。这个调用必须能够自己"生活",所以如果你在浏览器的地址栏中使用它,它也必须工作。否则,它也不会在脚本中工作。
因此,为了测试脚本是否工作(当然,你也可以使用Firebug等工具),你可以从浏览器调用它:
http://<yoursite>/_php/search.php?term=%
然后,脚本必须连接到数据库并执行查询,返回自动完成所需格式的有效JSON。因此,为了响应上面的调用,您必须在浏览器窗口中看到一个有效的JSON。
.autocomplete函数与$("#auto")正确绑定,并且输入字段的id确实为"auto"。因此将生成调用。您放在javascript中的URI必须是有效的,并引用javascript,因此,如果表单位于/html/searchpage.html中,而脚本位于/''hp/search.php中,则相对URI将为/_php/search.php(当然,如果表单在/html/forms/search.html中,则需要../../_php/search.php等)。