这是我的php文件。我想要自动提示我的文本框无法正常工作。我有3-4个autosuggest来源。
<?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>
答案 0 :(得分:1)
您遇到语法错误:
$(document).ready(function() {
$("#auto").autocomplete({
source: "../_php/search.php",
autoFocus:true
}); //<----should be closed like this.
});
答案 1 :(得分:0)
您无法生成多个 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);
之后<{1}}必须只发生一次
mysqli_close
} / *以json编码的数组折回结果。 * / echo json_encode($ return_arr);
另外,以防万一,输出JSON内容类型标题:
array_push($return_arr, $row_array);
最后,您在评论中报告此错误:
}
/* Toss back results as json encoded array. */
Header("Content-Type: application/json; charset=UTF-8");
die(json_encode($return_arr));
此错误只能由一件事造成:您必须包括PHP <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
不能这样做 - include '../_php/search.php';
必须是一个独立的PHP脚本,如果你从这样的浏览器调用它的URL,它应该返回一个有效的JSON:
search.php
即它应该返回类似
的内容http://<yoursite>/_php/search.php?term=%
HTML文件可以在任何您想要的位置,让我们说它位于/_html/page.html
此文件包含必要的JS代码,它位于/ _js中,所以/_js/jquery.min.js等等。
PHP由HTML中的Javascript代码调用,详见另一个答案。当您在Javascript中包含“search.php”网址时,会生成新的浏览器调用,其在AJAX中具有自己的生命周期。此调用必须能够自行“生存”,因此如果您在浏览器的地址栏中使用它,它也必须有效。否则它在脚本中也不起作用。
因此,要测试脚本是否正常工作(当然您也可以使用Firebug等工具),您可以从浏览器中调用它:
[["PnoNumber1":"PNameNumber1"],["PnoNumber2":"PNameNumber2"]]
然后,脚本必须连接到数据库并执行查询,以Autocomplete期望的格式返回有效的JSON。因此,在回答上述调用时,您必须在浏览器窗口中看到有效的JSON。
.autocomplete函数与$('#auto')绑定正确,输入字段的ID确实为'auto'。因此将生成呼叫。你在javascript中输入的URI必须是有效的,参考javascript ,所以如果表单位于/_html/searchpage.html,而脚本位于/_php/search.php,那么相对URI将是../_php/search.php(当然如果表格在/_html/forms/search.html中,你需要../../_php/search.php等等。)