2011-09-20 61 views
2

我已經做了大量的研究,但我仍然沒有得到如何使用jQuery ui自動完成。自動完成不起作用,我不知道爲什麼。任何幫助將不勝感激!jQuery UI自動完成JSON響應問題

我在前臺有以下內容。 1. jQuery正確鏈接。 2. jQuery-ui正確鏈接。 3. jQuery-ui css正確鏈接。

<script> 
$("#tags").autocomplete({ 
source: function(request, response){ 
$.post("/panel/tags.php", {data:request.term}, function(data){  
    response($.maps(data, function(item) { 
    return { 
     label: item.tagName, 
     value: item.tagID 
    } 
    })) 
}, "json"); 
}, 
minLength: 2, 
dataType: "json", 
cache: false, 
focus: function(event, ui) { 
return false; 
}, 
select: function(event, ui) { 
this.value = ui.item.label; 
/* Do something with user_id */ 
return false; 
} 

}); 
</script> 


<div class="ui-widget"> 
    <label for="tags">Tags: </label> 
    <input id="tags" size="50" /> 
</div> 

在後端:

$query_tags = "SELECT tagID, tagName FROM DCB_Tags WHERE tagName LIKE '".$_GET['tags']."%' ORDER BY tagName ASC LIMIT 10"; 
$result_tags = mysql_query($query_tags) or die ("Error: " . mysql_error()); 

$response = array(); 
$tags = array(); 
while($row=mysql_fetch_array($result_tags)) 
{ 
$tagID=$row['tagID']; 
$tagName=$row['tagName']; 
$tags[] = array('tagID'=> $tagID, 'tagName'=> $tagName); 

} 

header("content-type: text/javascript"); 
echo json_encode($tags); 
exit(); 

輸出,用於這是:

[{ 「TAGID」: 「1」, 「變量名」: 「藝術」},{」 tagID「:」4「,」tagName「:」art shows「},{」tagID「:」3「,」tagName「:」artist「},{」tagID「:」2「,」tagName「設計「}]

如果你通過放置?tag = art來訪問頁面,它正確地消除了「設計」。

回答

3

它看起來像你正在做一個post然後試圖在PHP頁面上拾取$_GET['tags']。因此,請嘗試使用ajax函數並在您的php頁面上提取$_GET['term']。另外,$.maps不是一個函數。我想你的意思是$.map

而且,如果你想label作爲輸入的值,那麼不指定value場。如果您只指定一個,則自動完成將使用label

jQuery的自動完成:

$("#tags").autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: "/panel/tags.php", 
      dataType: "json", 
      data: {term: request.term}, 
      success: function(data) { 
        response($.map(data, function(item) { 
         return { 
          label: item.tagName 
         }; 
       })); 
      } 
     }); 
    }, 
    minLength: 2, 
    select: function(event, ui) { 
     /* Do something with user_id */ 
    } 
}); 

PHP:

$query_tags = "SELECT tagID, tagName FROM DCB_Tags WHERE tagName LIKE '".mysql_real_escape_string($_GET['term'])."%' ORDER BY tagName ASC LIMIT 10"; 

鏈接教程:http://www.jensbits.com/2011/08/24/using-jquery-autocomplete-when-remote-source-json-does-not-contain-label-or-value-fields/

+1

太棒了!請注意:我需要一個與標籤不同的值(在我的例子中,cust_name和cust_nbr)。在「label:item.tagName」之後添加第二行:「value:tagId」。另外,從服務器返回的JSON包含一個包含實際數據的子數組,我的客戶信息在data.cust_data中。在你的$ .map中做:「$ .map(data.cust_data,function(item){」。(我猜我可以用item.cust_data.cust_nbr)只是一個簡單的參考。 – gregthegeek

0

我把 「警報(data.length);」在成功功能開始時,檢查從服務器收到的數據是否正確。它使得jquery控件在收到數據時無法顯示任何內容。