【问题标题】:jQuery UI autocomplete with mysql database使用 mysql 数据库的 jQuery UI 自动完成
【发布时间】:2012-02-11 15:33:14
【问题描述】:

我整天都在为 jQuery 自动完成而苦苦挣扎。我无法弄清楚如何将 jQuery UI 自动完成功能与 mysql 数据库连接起来。我不知道 php 文件应该是什么样子,如何将请求发送到 php 等。在 jQuery 站点上的演示和文档中,有一个简单的远程数据源示例,其中源为:源:“search.php”。那么 search.php 如何知道我在输入框中输入了什么? search.php 没有附加查询:/ 我注意到使用了 json .. 我很困惑,我尝试了十几种没有结果的方法。我需要的是简单的自动完成,其中包含我在文本框中输入的文本的城市名称。

我的数据库看起来像:

table_cities:
-------------
id:   -city id
name: -city name

我需要自动完成来显示包含我在文本框中输入的文本的城市,例如

“po”将导致“利物浦”“朴茨茅斯”...

html
----
<input type="text" id="cities" />

js
--
$( "#cities" ).autocomplete({
...

谢谢!

【问题讨论】:

    标签: mysql jquery-ui autocomplete


    【解决方案1】:

    您只需要返回一个 JSON 编码的 id/value 对象数组。自动完成插件还发送一个名为“q”的获取参数,其中包含当前输入框中的内容。一个简单的search.php 文件示例:

    $autocomplete_value = mysql_real_escape_string($_GET["q"]);
    $sql = "select id, name from table_cities where name LIKE '%$autocomplete_value%'";
    $query = mysql_query($sql);
    
    $results = array();
    while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
        array_push($results, array('id' => $row['id'], 
                                   'value' => $row['name']) );
    }
    echo json_encode($results);
    

    你需要适应你可能使用的任何 PHP 框架,但模式应该是相同的 - 循环通过结果创建一个 'id' 和 'value' 对象的数组,然后对其进行 json 编码。

    编辑:您可能希望更新 SQL 以进行小写比较(因此忽略大小写)和其他此类增强功能,但这至少应该让您朝着正确的方向前进。

    【讨论】:

    • 谢谢,这解决了一半的问题,我不知道请求是通过名为“q”的参数发送的。问题的另一半是 jQuery .. 当我将您的 php 代码与简单的 jquery 一起使用时,返回的是所有城市,而不仅仅是匹配的城市:$("#cities").autocomplete({ source:"scripts/loc.php", minLength : 4、选择:function(event, ui) { alert(ui.item.id); } });
    • 查看 Firebug for Firefox 或使用 Safari/Chrome 的内置开发模式 - 非常适合调试 ajax 调用并查看发送到/从服务器发送的内容。
    【解决方案2】:

    我没有使用过 jQuery 自动完成功能,但似乎很清楚,它会向您的 Web 服务器进行 AJAX 回调,提供已在框中输入的数据。 Web 服务器将根据您的需要查询数据库,并返回应显示的结果。

    查询不会是 jQuery 插件的一部分;你必须自己写。

    【讨论】:

    • 是的,我看到在一些示例中使用了 ajax ($.ajax..),但我不明白它在 jQuery UI 演示和文档的示例中是如何工作的 -> 远程数据源。当您单击查看该示例的源代码时,只有 source: ""search.php" without $.ajax..
    • 我想search.php 接受一个表单值;当调用 php 文件时,它会获取表单值,查询数据库,并将结果集返回给调用者(在本例中为插件),然后调用者将显示结果。您对其中哪一部分有困难?
    【解决方案3】:

    你可以在while循环中使用".="。

    $data = "";
    while($row = mysqli_fetch_assoc($result))
    {
    $data .= "bla bla bla..."
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 2014-10-22
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2011-02-02
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多