【问题标题】:jquery UI autocomplete drop-down list not showing upjquery UI自动完成下拉列表未显示
【发布时间】:2011-08-28 08:53:10
【问题描述】:

我正在使用 jquery UI 自动完成功能,但由于某种原因,我无法弄清楚为什么下拉列表没有显示。我已经尝试了我能想到的一切,但没有运气......我希望有人能帮助我。 Firebug 从我的 PHP 脚本中显示了正确的 JSON 输出。

成功下的alert(data)显示:[object Object]

HTML 代码

<select name=key1 id=key1>
  <option selected value="">CHOOSE ONE </option>
  <option value="allrecs">ALL RECORDS <</option>
  <option value="citnumb">CIT NUMBER <<option>
  <option value="sernumb">SERIAL NUMBER </option>
  <option value="model">MODEL </option>
</select>

<input type="text" size=30 name="qvalue" id="qvalue">

JQUERY 脚本

$("#qvalue").autocomplete(  
{
  source: function(request, response) 
  {
    $.ajax(
    {
      url: "jqsuggest2.php",
      type: "POST",
      dataType: "json",
      data:{term: request.term,searchkey:$('#key1').val()
    },
    success: function(data) 
    {
      alert(data);
      response( $.map( data, function(item) 
      {
         return 
         {
            value: item.term
         }
       }));
                }
        });
  },
  minLength: 2

});

PHP 脚本

        $json = '[';
        $first = true;

        while($row = mysql_fetch_array($result)) 
        {
            if (!$first)
            { 
                $json .=  ','; 
            }
            else
            {
                $first = false; 
            }

            if ($searchkey == "citnumb")
            {
                $json .= '{"value":"'.$row['citnum'].'"}';
            }
            if ($searchkey == "sernumb")
            {
                $json .= '{"value":"'.$row['sernum'].'"}';
            }
            elseif ($searchkey == "model")
            {
                $json .= '{"value":"'.$row['model'].'"}';
            }

        }
        $json .= ']';
        echo $json;
        }

Firebug 输出 [{"value":"28225"}]

任何帮助将不胜感激
谢谢
克里斯

【问题讨论】:

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


    【解决方案1】:

    您需要将数组添加到source 选项。我相信如果您更改 map 函数中的 return 语句,您应该设置为 go。所以,改变

    return 
    {
        value: item.term
    }
    

    return item.source
    

    【讨论】:

    • Willam: 我收到以下错误...“missing ; before statement tobagoborn.com/javascript/jquery-ui/js/jquery-1.5.1.min.js Line 16”...。提示使用 goggle 的 jquery CDN...。我添加了 {}的并将 item.term 更改为 item.value,现在它可以工作了!感谢您的协助!!!
    • 哦,是的...应该是item.source...很高兴你在最后弄明白了。
    【解决方案2】:

    $.map 用于将一个数组转换为另一个数组。在自动完成小部件的上下文中,它用于将源数组转换为自动完成小部件所期望格式的数组。

    在您的情况下,它 看起来 就像您的 php 正在返回一个数组,其中的对象结构如下:

    [{ "value": "1234"}, ... ]
    

    原来这是一个可供自动完成使用的有效数组。您不需要任何后期处理。换句话说,这应该适合你:

    $("#qvalue").autocomplete(  
    {
      source: "jqsuggest2.php",
      minLength: 2
    });
    

    事实上,你可以缩短你的 PHP 只返回一个字符串数组:

    ["1234", "4567", "89101"]
    

    这也是自动完成使用的有效数组。

    【讨论】:

    • 我很好奇从服务器发送到自动完成小部件的字符串格式。 jQuery Autocomplete 文档说:“当使用字符串时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以在同一主机上或不同主机上(必须提供 JSONP)。”所以我使用了 JSON。你清楚地知道这段代码。提供自动完成功能的远程服务器不需要 JSON 吗?这是一个变化并且文档不正确吗?有什么关系?
    • 是的,远程服务器必须返回 JSON 格式的数据以供插件使用。提供字符串只是让小部件知道使用 AJAX 通过提供的 URL 检索 JSON 数据。
    • 谢谢,安德鲁。我不明白这提供了一个字符串来获取 JSON 的 ajax 检索。但是您的评论证实我应该在 php 中生成 JSON 并使用 data: JSON;在自动完成中得到它。谢谢。
    猜你喜欢
    • 2015-10-15
    • 2012-06-09
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多