jQuery 自动完成 Mysql PHP

Posted

技术标签:

【中文标题】jQuery 自动完成 Mysql PHP【英文标题】:jQuery Autocomplete Mysql PHP 【发布时间】:2011-07-15 09:16:47 【问题描述】:

嗨,有人可以看看这个,让我知道我哪里出错了。我正在尝试让 jQuery UI 自动完成工作。这是我的代码: 这是search.php

include "db_connect.php";
$search = $_GET['term'];    
    $result = mysql_query("SELECT Title FROM `movie` WHERE `Title` LIKE '%$search%' ORDER BY Title ASC") or die('Something went wrong');
    $rows = array();
    while ($row = mysql_fetch_assoc($result))
        $rows[] = $row;

    
print json_encode($rows);
?>

这是我的 javascript 内联脚本

<script type="text/javascript">
    $(document).ready(function()
    
        $('#auto').autocomplete(
        
            source: "./search.php",
            minLength: 3
        );
    );
</script>

这是“自动”div

<div id="searchTxtFieldDiv">
<p><input type="text" id="auto" /></p>
</div>

当我使用 firebug 查看调用时,我看到 search.php 正在返回

["Title":"Sin City"]

jQuery 只是显示 UNDEFINED 有什么想法吗??

【问题讨论】:

您使用的是哪个自动完成功能? @Kristoffer 来自 1.8 UI 的那个 【参考方案1】:

@肖恩 谢谢伙计,有时您只需要有人指出显而易见的事情。 我终于让它工作的方式是

    include "db_connect.php";
$search = protect($_GET['term']);   
    $result = mysql_query("SELECT Title FROM `movie` WHERE `Title` LIKE '%$search%' ORDER BY Title ASC") or die('Something went wrong');

    $json = '[';
        $first = true;
        while ($row = mysql_fetch_assoc($result))
        
            if (!$first)  $json .=  ',';  else  $first = false; 
            $json .= '"value":"'.$row['Title'].'"';
        
        $json .= ']';
        echo $json;

【讨论】:

【参考方案2】:

看看jquery ui autocomplete documentation。您返回的 JSON 与自动完成所查找的内容不匹配。您返回的对象必须具有名为 label 或 value(或两者)的属性。

您可以尝试以下选项:

选项 1:更改返回的 JSON

更改返回的 JSON 以包含标签/值属性,例如:

["label":"Sin City"]

从示例中,它似乎也使用了 id 属性。我相信以上是自动完成显示值列表的最低要求。我想你也可以返回一个字符串数组,它会以与上面完全相同的方式呈现它。

[ "Sin City", "Etc" ]
    

选项 2:更改私有 _render 函数

更改自动完成的私有 _renderItem 函数以使用您的自定义属性,如 autocomplete example 所示(未经测试):

$( "#project" ).autocomplete(
    source: "./search.php",
    minLength: 3    
)
.data( "autocomplete" )._renderItem = function( ul, item ) 
    return $( "<li></li>" )
   .data( "item.autocomplete", item )
   .append( item.Title )
   .appendTo( ul );
;

这有点灵活,但更难看。

【讨论】:

【参考方案3】:

我要这么说,总是清理用户输入。

这很难说,因为我从未使用过 jQuery 自动完成功能,但我认为你应该以“#auto”的值为目标。像这样:$('#auto').val().autocomplet

【讨论】:

是的,谢谢。我认为最好包含我遇到问题的代码,而不是用与手头问题无关的代码来膨胀它。感谢您的 sn-p,但恐怕它不起作用【参考方案4】:

至少在 $search 上运行 mysql_real_escape_string(),然后再将其插入 SQL 查询。

你的 javascript 中的 source: bit 可能搞砸了。您应该删除 .如果“search.php”位于文档根目录的“顶部”。

Firebug 也可能会帮助您在沟通中达到顶峰。

【讨论】:

是的,我在我的 db_connect.php 文件中完成了 mysql_real_escape_string() 但我认为在这种情况下它并不重要,我可以在它工作后保护它。更改绝对路径“./”没有效果。

以上是关于jQuery 自动完成 Mysql PHP的主要内容,如果未能解决你的问题,请参考以下文章

使用 php、mysql 和 jQuery 实现自动完成

如何从 php mysql 查询中为 jQuery 自动完成准备多维数组?

jQuery Ui 自动完成没有从 PHP MySQL 文件中获取价值

jQuery UI 自动完成,使用 PHP/MySQL 搜索 2 个表

jquery自动完成不适用于JSON数据

jQuery 自动完成从 Mysql 数据库中拉取