2011-08-27 158 views
1

我正在使用jQuery UI自動完成,由於某種原因,我無法弄清楚爲什麼沒有顯示下拉列表。我嘗試了所有我能想到的事情,但沒有運氣......我希望有人能幫助我。 Firebug從我的PHP腳本中顯示正確的JSON輸出。jquery UI自動完成下拉列表不顯示出來

下成功的警報(數據)表示:[對象的對象]

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; 
     } 

螢火蟲輸出 [{ 「值」: 「28225」}]

任何幫助,將不勝感激
由於
克里斯

回答

0

您需要有一個數組來source選項。我相信如果你改變你的地圖函數中的return語句,你應該設置爲去。所以,用於將一個陣列變換成另一種陣列改變

return 
{ 
    value: item.term 
} 

return item.source 
+0

Willam:我得到了以下錯誤...「缺少;之前的聲明 http://tobagoborn.com/javascript/jquery-ui/js/jquery-1.5.1.min.js 行16」.. ..其中提示使用護目鏡的jQuery的CDN ....我加回了{}的和改變item.term item.value,現在它的作品! 感謝您的協助! – ChrisJ

+0

哦,是啊......應該是'item.source' ...很高興你在最後想到它。 –

0

$.map。在自動填充小部件的上下文中,它用於將源數組轉換爲自動填充小部件所需格式的數組。

在你的情況下,看起來像你的PHP與結構類似這樣的對象返回一個數組:

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

原來,這是自動完成使用一個有效的數組。你不應該需要任何後期處理。換句話說,這應該爲你工作:

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

事實上,你可能會縮短你的PHP只返回一個字符串數組:

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

這也是自動完成使用一個有效的數組。

+0

我很好奇從服務器發送到自動填充小部件的字符串的格式。 jQuery自動完成文檔說:「使用字符串時,自動完成插件期望該字符串指向將返回JSON數據的URL資源。它可以在同一個主機上或不同的主機上(必須提供JSONP)。「所以我使用了JSON,你清楚的知道這個代碼,對於遠程服務器提供Autocomplete,JSON是不是必須的?這是一個變化,文檔是不正確?什麼是交易? –

+0

是的,遠程服務器必須返回JSON格式的數據供插件使用。提供一個字符串只是讓小部件知道使用AJAX通過提供的URL檢索JSON數據 –

+0

謝謝,安德魯。我不明白這提供了一個字符串來獲得JSON的ajax檢索。但您的評論確認我應該在PHP中生成JSON並使用數據:JSON;在Autocomplete中獲取它。 –

相關問題