【问题标题】:JQuery autocomplete server-side matchingJQuery 自动完成服务器端匹配
【发布时间】:2012-02-11 00:15:24
【问题描述】:

我正在尝试设置一个自动完成字段。

我已经阅读了 JQuery UI 文档,但是所有示例都假设源是一个静态项目列表,JQuery 将从其中选择匹配的条目(我的意思是静态 = 列表是完整的,不依赖于用户输入)。

这是来自“远程数据源”示例的代码:

$( "#birds" ).autocomplete({
    source: "search.php",
    ...

我希望 JQuery 调用 search.php?query=mytext(此 URL 返回匹配项列表),因为我需要使用 PHP 在数据库中查找建议。

有没有办法做到这一点?也许我没看懂文档?

【问题讨论】:

  • 很棒的话题。我也在研究自动完成,我试图找出服务器端的 php 文件,该文件将通过名称和类别在数据库中搜索。你有什么发现吗?比
  • @alexela 看看问题的答案
  • (没有帮助。或者我没找到。

标签: jquery jquery-ui autocomplete jquery-autocomplete jquery-ui-autocomplete


【解决方案1】:

来自关于自动完成的 jQuery UI 文档:

只需指定源选项,即可自定义自动完成以使用各种数据源。数据源可以是:

  • 包含本地数据的数组
  • 一个字符串,指定一个 URL
  • 回调

再往下

使用字符串时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以在同一台主机上,也可以在不同的主机上(必须提供 JSONP)。请求参数“term”被添加到该 URL。数据本身可以采用与上述本地数据相同的格式。

您是否尝试过您提供的代码?它应该调用 url search.php?term=mytext

【讨论】:

  • 谢谢!你完全明白我在找什么。不幸的是,我在文档中错过了这一点,但我发誓我读了很多遍,因为我确信有办法做到这一点。
  • (我确实尝试了代码,但代码中没有明显的地方知道您有一个带有文本的附加 GET 参数)
【解决方案2】:

这是我不久前写的一些客户端代码的 sn-p(为了保护无辜者而改变了!),它完全按照你的意愿...

    function ConfigureAutoComplete() {

        $('#myautocomplete').autocomplete({
            type: "POST",
            minLength: 3,
            source : function (request, response) 
            {                         
                var source_url = "../handlers/MyLookup.ashx?someparameter=" + $("#someparameter").val();

                $.ajax({
                    url: source_url,
                    dataType: "json",
                    data: request,
                    success: function (data) { response(data); },
                    error : function (a,b,c) { HandleLookUpError(a); }
                    });
            },                
            select: function (event, ui) { $('#result').val(ui.item.id); }               
        });
    }

正如已经说过的,您的 search.php 页面可以返回您想要的任何内容。因此,您可以缩小服务器上的列表并将其返回给客户端,然后客户端将允许用户从该列表中进行选择。

【讨论】:

    【解决方案3】:

    那么 search.php 可以返回它想要的任何东西。

    对于静态内容,您可能需要执行以下操作:

    $myList = array('pizza'=>array('mushrooms','pepperoni','olives'));
    echo json_encode($myList);
    

    这与 db 调用会给您带来的结果相差不远。

    php 中的许多框架在从数据库中查找后返回一个关联数组。我相信(我记得)即使是 php 中内置的标准 mysql 工具也会做同样的事情(或类似的事情)。

    json_encode/json_decode 可以帮助将 php 中的任何内容转换为 json。然后你需要做的就是回显它,自动完成会相应地响应。

    你做得对。您可能只需要稍微不同的格式。您目前从 search.php 输出什么?

    哦,我差点忘了你可能需要指定你的输出是 jsonp(虽然有时你可以不这样做):

    header('content-type: application/json; charset=utf-8');
    

    【讨论】:

      猜你喜欢
      • 2015-12-24
      • 2021-09-07
      • 2011-11-30
      • 2010-11-01
      • 2016-09-01
      • 2018-06-14
      • 2011-05-07
      • 2011-01-02
      • 1970-01-01
      相关资源
      最近更新 更多