为什么我的自动填充功能不是暗示任何东西

时间:2015-04-02 06:54:23

标签: javascript php jquery ajax mysqli

这是我的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>

2 个答案:

答案 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等等。)