为什么我的自动完成没有提示任何内容

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')

此错误只能由一件事引起:您必须 包括来自 PHPsearch.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 等等).