我无法显示从jquery的自动完成JSON的变量

我无法显示从jquery的自动完成JSON的变量

问题描述:

  • 名称不中自动完成
  • 的下拉框中显示我怎么可以指定每个变量到一个特定的文本框,当我得到的回应

HTML:我无法显示从jquery的自动完成JSON的变量

<!DOCTYPE html> 
<html> 
<head> 
<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 style="font-size:62.5%;"> 
<input type="text" id="name" /> 
<input type="text" id="id" /> 
<input type="text" id="tel" /> 
<script> $("#name").autocomplete({ source: "php/company.php" }); </script> 
</body> 
</html> 

PHP:

$term = strtolower($_GET["term"]); 

$sql = "select ID,NAME,TEL from COMPANY where NAME like '%$term%' order by NAME"; 
$result = mysql_query($sql, DBCONN) or die ("<br>MySQL Error: " . mysql_error(DBCONN)); 
while($row = mysql_fetch_array($result)) 
{ 
    $row_set = array( 
       "label" => $row['NAME'], 
       "id" => $row['ID'], 
       "tell" => $row['TEL']); 
} 
echo json_encode($row_set); 

萤火JSON响应:

{"label":"MacDonald","id":"1","tel":"1-800-4444"} 

RTFM

从本地数据的数据,URL或回调可以有两种 变种:

  • 字符串数组:
  • 的数组具有标签和值属性的对象

你的json响应不是真的是一个数组,是吗?您也只能更新一个字段的自动填充。

$("#name").autocomplete({ source: function callback(term, autocomplete) { 
    $.getJSON("php/company.php?term="+term, function(data) { 
     // do the magic here: extract an option array from your data, e.g. 
     var arrayOfStrings = data.names; 
     autocomplete(arrayOfStrings); 
    }); 
}); 

我不明白你想用其他的数据做什么,寻找您将无法自动完成电话号码输入字段,将您具体的名字你的数据库是什么时候?


编辑:你的问题是,你的JSON响应目前并输出的最后一个匹配的名称为对象。如果您将返回一个数组,则自动完成功能将非常有用。修正了几项错误:

$term = mysql_real_escape_string(strtolower($_GET["term"])); 

$sql = "select ID,NAME,TEL from COMPANY where NAME like '%$term%' order by NAME"; 
$result = mysql_query($sql, DBCONN) or die ("{\"error\":\"" . mysql_error(DBCONN) . "\"}"); 
$output = array(); 
while($row = mysql_fetch_array($result)) { 
    $row_set = array( 
     "label" => $row['NAME'], 
     "value" => $row['NAME'], 
     "id" => $row['ID'], 
     "tell" => $row['TEL']); 
    $output[] = $row_set; 
} 
echo json_encode($output); 

如果你使其与调整Ajax调用(见上文)的自定义回调函数,你可以现在试图提取阵列之前检查data.error

现在你可能想玩自定义项目显示,焦点和选择事件。例如与

+0

当我得到公司名称时,我想要将电话号码也显示在电话的文本框中 – nouky 2012-03-22 12:08:00

+0

自动完成的感觉是获取不止一个(公司)名称 - 您想要什么处理多个ID /电话号码? – Bergi 2012-03-22 13:22:08

+0

我想将公司的电话和身份证传递给其他人。 Tnxx为你的答案是有帮助的! – nouky 2012-03-22 18:55:07

默认情况下,插件期望字符串,而不是对象的数组。您需要使用custom data rendering

$("#name").autocomplete({ 
     .... 
     focus: function(event, ui) { 
      $("#name").val(ui.item.label); 
      return false; 
     } 
     .... 
    }) 
    .data("autocomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
      .data("item.autocomplete", item) 
      .append("<a>" + item.label + "<br>" + item.id + "</a>") 
      .appendTo(ul); 
    }; 
+0

我改变了我的代码,但仍然没有任何反应,也许错误是在我的PHP响应? '$( “输入#自动完成”) \t .autocomplete({ \t \t源: “PHP/company.php”, \t \t的minLength:0, \t \t焦点:功能(事件,UI){ \t \t \t $( “#autocomplete”).VAL(ui.item.label); \t \t \t返回FALSE; \t \t},\t \t \t \t \t select:function(event,ui){(“#autocomplete”).val(ui.item.label); \t \t \t return false; \t \t \t} \t \t }) \t。数据( “自动填充”)._ renderItem =函数(UL,项目){ \t \t返回$( “

  • ”) \t \t \t。数据(“项。自动完成”,项目) \t \t \t .append( “” + item.label + “
    ” + item.desc + “
    ”) \t \t \t。 appendTo(ul); \t};' – nouky 2012-03-22 12:27:25