【问题标题】:JQuery UI auto-complete is not filtering the response text returned by php fileJQuery UI 自动完成没有过滤 php 文件返回的响应文本
【发布时间】:2015-07-25 21:01:30
【问题描述】:

使用本地数组传递的 JQuery UI 自动完成显示过滤结果。
这是代码:

var localArray = ["BASIC","C++","Fortran","Haskell","JavaScript","PHP","Scheme"];
$( "#tags" ).autocomplete({
    source: localArray
});

但是当我将 php 文件传递​​给源标记(返回相同的数组)时,现在自动完成显示(整个数据)未过滤的结果,无论按下哪个字符(匹配或不匹配)。
这是代码:

$( "#tags" ).autocomplete({
    source: "PHP_Code/MyAjax.php?page=tut_search_ac"
});

这是 PHP 文件:

$query = "SELECT title FROM tutorial";
$rs = mysql_query($query) or die(mysql_error()." in query $query");
if($rs)
{
    while($row = mysql_fetch_array($rs))
    {
        $contents[] = $row['title'];
    }
}

echo json_encode($contents);

它总是显示数组的所有值。也可以查看HERE.
请给我一些解决方案。
提前谢谢你。

【问题讨论】:

    标签: javascript jquery json jquery-ui jquery-ui-autocomplete


    【解决方案1】:

    source 属性用作远程资源而不是本地资源需要您的数据采用特定格式。具体来说,每个项目都是一个具有labelvalue 属性的JSON 对象。更改您的 PHP 脚本以输出 JSON 数据,如下所示:

    [
      { label: "BASIC", value: "BASIC" },
      { label: "C++", value: "C++" },
      { label: "Fortran", value: "Fortran" },
      { label: "Haskell", value: "Haskell" },
      { label: "JavaScript", value: "JavaScript" },
      { label: "PHP", value: "PHP" },
      { label: "Scheme", value: "Scheme" }
    ]
    

    要从您的 PHP 中获取此结构,您需要一个具有以下格式的 PHP 数组:

    $contents[] = array( "label" => "BASIC", "value" => "BASIC" );
    $contents[] = array( "label" => "C++", "value" => "C++" );
    $contents[] = array( "label" => "Fortran", "value" => "Fortran" );
    $contents[] = array( "label" => "Haskell", "value" => "Haskell" );
    $contents[] = array( "label" => "JavaScript", "value" => "JavaScript" );
    $contents[] = array( "label" => "PHP", "value" => "PHP" );
    $contents[] = array( "label" => "Scheme", "value" => "Scheme" );
    
    echo json_encode($contents);
    

    您还可以在这里查看如何操作 jquery ui 以适应您的数据:

    https://jqueryui.com/autocomplete/#custom-data

    【讨论】:

    • 请给我示例数据,以便 php 脚本生成以下格式
    • 大声笑——好的,我会更新我的答案。我可以为您做任何其他项目吗?
    • 谢谢你亲爱的@swatkins。我会尽快检查并接受您的回答。
    • 存在同样的问题。现在我上传了。请检查此link
    • 刚刚检查过 - 看起来它正在按预期工作。
    【解决方案2】:

    我意识到了这个问题。上面的代码并没有什么实际的错误,只是有点缺乏概念。
    JQuery 只过滤本地 JavaScript 给出的数组。
    但不过滤php/server-side返回的响应文本。
    因此,我们必须在 php 文件中包含过滤代码。 (这也是理想的)

    $keyward = $_REQUEST['term']; //term is equal to keyword
    $query = "SELECT title FROM tutorial WHERE title LIKE '%$keyward%' ORDER BY title";
    $rs = mysql_query($query) or die(mysql_error()." in query $query");
    if($rs)
    {
        while($row = mysql_fetch_array($rs))
        {
            $contents[] = $row['title'];
        }
    }
    
    echo json_encode($contents);
    

    如果您认为有问题,请在 cmets 中反馈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2011-03-21
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多