为什么我的自动完成没有提示任何内容
WHy my autocomplete is not suggesting anything
这是我的 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 content-type headers:
}
/* 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
脚本。 IE。在你的一些 PHP 脚本中有一个
include '../_php/search.php';
不能这样做 - search.php
必须是一个独立的 PHP 脚本,如果调用它的 URL 它应该 return 是一个有效的 JSON从这样的浏览器:
http://<yoursite>/_php/search.php?term=%
即,它应该return类似于
[["PnoNumber1":"PNameNumber1"],["PnoNumber2":"PNameNumber2"]]
文件组织(有不止一种方法)
HTML文件可以放在任何地方,假设它在/_html/page.html
此文件包含必要的 JS 代码,这些代码位于 /_js,因此 /_js/jquery.min.js 等等。
PHP 由 HTML 中的 Javascript 代码调用,如另一个答案中所述。当您在 Javascript 中包含 'search.php' URL 时,这会生成一个 新的浏览器调用 ,它在 AJAX 中有自己的生命周期].此调用本身必须能够 "live",因此如果您在浏览器的地址栏中使用它,它也必须有效。否则它也不会在脚本中工作。
因此,要测试脚本是否正常工作(当然您也可以使用 Firebug 等工具),您可以从浏览器调用它:
http://<yoursite>/_php/search.php?term=%
然后脚本必须连接到数据库并执行查询,return以自动完成所需的格式输入有效的 JSON。所以在回答上面的调用时,你必须在浏览器中看到一个有效的 JSON window.
.autocomplete 函数与 $('#auto') 正确绑定并且输入字段的 ID 确实为 'auto'。所以会产生调用。您在 javascript 中输入的 URI 必须有效 参考 javascript,因此如果表单位于 /_html/searchpage.html,而脚本在/_php/search.php,相对URI会是../_php/search.php(当然如果表单在/_html/forms/search.html, 你需要../../_php/search.php 等等).
这是我的 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 content-type headers:
}
/* 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
脚本。 IE。在你的一些 PHP 脚本中有一个
include '../_php/search.php';
不能这样做 - search.php
必须是一个独立的 PHP 脚本,如果调用它的 URL 它应该 return 是一个有效的 JSON从这样的浏览器:
http://<yoursite>/_php/search.php?term=%
即,它应该return类似于
[["PnoNumber1":"PNameNumber1"],["PnoNumber2":"PNameNumber2"]]
文件组织(有不止一种方法)
HTML文件可以放在任何地方,假设它在/_html/page.html
此文件包含必要的 JS 代码,这些代码位于 /_js,因此 /_js/jquery.min.js 等等。
PHP 由 HTML 中的 Javascript 代码调用,如另一个答案中所述。当您在 Javascript 中包含 'search.php' URL 时,这会生成一个 新的浏览器调用 ,它在 AJAX 中有自己的生命周期].此调用本身必须能够 "live",因此如果您在浏览器的地址栏中使用它,它也必须有效。否则它也不会在脚本中工作。
因此,要测试脚本是否正常工作(当然您也可以使用 Firebug 等工具),您可以从浏览器调用它:
http://<yoursite>/_php/search.php?term=%
然后脚本必须连接到数据库并执行查询,return以自动完成所需的格式输入有效的 JSON。所以在回答上面的调用时,你必须在浏览器中看到一个有效的 JSON window.
.autocomplete 函数与 $('#auto') 正确绑定并且输入字段的 ID 确实为 'auto'。所以会产生调用。您在 javascript 中输入的 URI 必须有效 参考 javascript,因此如果表单位于 /_html/searchpage.html,而脚本在/_php/search.php,相对URI会是../_php/search.php(当然如果表单在/_html/forms/search.html, 你需要../../_php/search.php 等等).