我的自动完成并没有暗示什么


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内容类型头:

}
/* 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脚本。也就是说,在你的一些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等)。