jquery自动完成远程数据源

Posted

技术标签:

【中文标题】jquery自动完成远程数据源【英文标题】:jquery autocomplete remote data source 【发布时间】:2012-05-18 06:59:29 【问题描述】:

我是 jQuery 的新手。我正在尝试 jQuery 自动完成远程数据源,这是我的代码:

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title></title>
    <meta name="GENERATOR" content="Quanta Plus">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
  </head>
  <body>
    <meta charset="utf-8">
    <style>
      .ui-autocomplete-loading 
        background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat;
      
    </style>
    <script>
      $(function() 
        var cache = ,
            lastXhr;
        $( "#birds" ).autocomplete(
          minLength: 2,
          source: function( request, response ) 
            var term = request.term;

            if ( term in cache ) 
              response( cache[ term ] );
              return;
            

            lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) 
              cache[ term ] = data;

              if ( xhr === lastXhr ) 
                response( data );
              
            );
          
        );
      );
    </script>
    <div class="demo">
      <div class="ui-widget">
        <label for="birds">Birds: </label>
        <input id="birds"  value="" />
      </div>
    </div><!-- End demo -->
  </body>
</html>

文件:search.php

<?php 

require_once("includes/connection.php");

$q = strtolower($_GET["birds"]);
echo $q;
$return = array();

$query = "SELECT title
  FROM `project`
  WHERE `title` LIKE CONVERT( _utf8 '%$q%'
  USING latin1 )";

$resultset=mysql_query($query,$connection);

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

while ($row = mysql_fetch_assoc($resultset)) 
  if (!$first) 
    $json .=  ',';
   else 
    $first = false;
  

  $json .= '"value":"'.$row['title'].'"';


$json .= ']';

echo $json;

?>

收到以下错误:

Notice:
Undefined
  index: birds in /var/www/html/workbench/sudeepc/project/search.php
  on line 4
    [
      "value":"chandrayaan",
      "value":"Project Management System",
      "value":"shoping cart",
      "value":"hospital management system"
    ] 

在该文本框上搜索时触发错误显示以下错误,并且没有搜索建议。

如何解决这个问题?

【问题讨论】:

显然$_GET["birds"] 不存在。如果将其替换为 $_POST["birds"] 会发生什么? $q = strtolower($_POST["birds"]);它导致相同的错误 既然他打电话给$.getJSON(),它应该正在将数据加载到$_GET['birds']。 PHP 不会因为没有 GET 值而抛出错误——它只会有一个空值。 当我输入文本框时,get请求转到search.php get http:// ...?term = sho所以我更改了我的搜索.php 到 $q = strtolower($_GET["term"]);现在没有错误火虫显示Sho [“值”:“购物车”]在响应中,没有为文本框出现自动完成。 span> 【参考方案1】:

根据 cmets,第一个错误似乎是由查找错误的 $_GET 变量引起的。支持您使用 Firebug 发现该问题并进行适当的纠正。

目前没有填写值的原因是因为在JSON前面回显了额外的字符串。删除echo $q; 行,它应该可以工作。

【讨论】:

以上是关于jquery自动完成远程数据源的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 自动完成(远程) - 示例

自定义 jquery 自动完成结果

使用 JSONP 的 Jquery 移动自动完成

jQuery UI 自动完成多个远程(JSON、PHP、JS)

远程模式 RoR 中的 jQuery UI 自动完成

使用 jQuery Mobile 1.4.2 远程自动完成列表视图提交表单?