2010-12-09 39 views
0

我正在嘗試使用jQuery UI自動完成,並且似乎無法將兩個和兩個放在一起。jQuery UI自動完成從變量解析數據

我有一個用於所有json數據請求的php頁面。我使用switch語句確定發出請求時要觸發哪個函數,使用post將該數據傳遞給php頁面,即; 「自動完成」傳遞給頁面,然後告訴它從我的數據庫中檢索特定的表格,然後將其編碼成json。

數據格式如下:[「1」:「Email」,「2」:「Hosting」]等等。 json數據中有可變數量的項目,但始終使用key =>值對。我需要該鍵爲該字段的值以及要在自動填充列表中顯示的值。 (如果需要,數據順序可以顛倒,這只是一個例子)。

我不需要或希望自動完成功能每次有人鍵入框中的某些字符時都會觸發此數據庫,所以我試圖僅生成該字段所需的選項的靜態列表,並將它們分配給用於autocomplete()的javascript對象。

function myFunction (DataType, ID) { 
    $j.ajax({ 
     type: 'POST', 
     cache: 'false', 
     url: 'json.php', 
     data: {jsonFunction:DataType}, 
     success: function(data){ 
       $j(ID).autocomplete({ source: [data] }); 
      } 
     }); 
}; 

的功能,然後調用我的document.ready()函數:

myFunction ("AutoComplete", "input#Type"); 

所以我需要的是能夠從一個Ajax請求自動完成可以作爲使用創建一個變量的選項。我只是不知道如何讓這個工作!我嘗試了幾種不同的方法無濟於事,包括通過我在這裏和其他地方看到的幾個例子解析數據。 ui自動完成的文檔聲明,您可以使用具有鍵值對的數組,但不管格式如何,它只是不喜歡我的數據。

我很想念一些明顯的東西,我確定。

+0

更新,這是從未解決。我放棄了使用自動完成的jquery-ui作品,因爲我無法讓它正常工作。我改爲使用編程生成的選擇框。 :( – Garrett 2010-12-29 16:43:27

回答

0

嗯,這是非常糟糕的做法,但你可以使用eval()。只需使用JavaScript的快速對象符號(括號如jQuery使用)

更好的解決方案 - 緩存數據庫(假設)查詢

+0

我會考慮緩存我的數據庫查詢。這可能會訣竅。我想盡可能多地刪除我的服務器上的不必要的負載,但仍然提供動態功能,例如此自動完成。 – Garrett 2010-12-10 15:35:31

+0

它更有意義緩存您的而不是試圖用JavaScript來做一些事情,SQL是一種快速的語言(命名另一種語言,可以毫秒搜索1M記錄:))。我不知道你的服務器模型,但看看Doctrine。它會自動爲您優化查詢和緩存。這是我經常使用的PHP ORM – sethvargo 2010-12-10 18:24:41