2011-11-20 42 views
1

我使用jQuery的自動完成,並希望有一個單獨的PHP文件來存儲數據,而不是創建一個變量(即VAR availableTags =「紅」,「橙」,「黃」,「綠‘藍’ ])如何調用jQuery自動完成的MySQL源數據?

但是,這樣做的時候,自動完成將不斷顯示所有可用的選項,而不是篩選出什麼類型的用戶在

任何想法

的Javascript:?

$(document).ready(function() { 

    $(".autocomplete").autocomplete({ 
      source: "../../db/autocomplete_list.php" 
    }); 

}); 

autocompl ete_list.php

require_once('../includes/connect.php'); 
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE); 

$colors = '['; 

$sth = $dbh->query ("SELECT * FROM constants 
        WHERE category='Colors' 
        ORDER BY display"); 

while ($row = $sth->fetch()) { 

    $colors.= '"'.$row[value].'", '; 

} 

$colors = rtrim($colors, ', '); 

$colors .= ']'; 

print $colors; 

autocomplete_list.php的執行

[ 「紅」, 「橙」, 「黃」,「綠色 「藍」]

編輯:

有我autocomplete_list.php文件更新以下內容。但是,現在自動完成不顯示我的值。如果我在FireBug中檢查響應,它會正確顯示結果,但看起來他們沒有被傳回自動完成。

require_once('../includes/connect.php'); 
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE); 

if(isset($_GET['term'])) { 
    $mysearchString = $_GET['term']; 
} 

$sth = $dbh->query("SELECT category, value, display FROM constants 
        WHERE category = 'COLORS' AND value LIKE '$mysearchString%' 
        ORDER BY display"); 

while ($row = $sth->fetch()) { 
    print $row['display']."\n";   
} 
+0

你看到頁面上的任何錯誤? –

+0

沒有錯誤。打開FireBug,沒有任何東西。 「GET dev.sample.com/db/autocomplete_list.php?term=l」的響應爲「黃色」,「藍色」。 – Michael

+0

它應該看起來像控制檯中的數組。是這樣嗎? –

回答

1

找到了解決此:

http://www.jensbits.com/2010/03/29/jquery-ui-autocomplete-widget-with-php-and-mysql/

require_once('../includes/connect.php'); 
$dbh = connect(DB_HOST,DB_USER,DB_PASSWORD,CM_DATABASE); 

$return_arr = array(); 

if(isset($_GET['term'])) { 
    $mysearchString = $_GET['term']; 
} 

$sth = $dbh->query("SELECT category, value, display FROM constants 
        WHERE category = 'COLORS' AND value LIKE '$mysearchString%' 
        ORDER BY display"); 

while ($row = $sth->fetch PDO::FETCH_ASSOC()) { 

    $row_array = $row['display']; 

    array_push($return_arr,$row_array); 

} 

echo json_encode($return_arr); 
0

source propery期望值的數組,而不是字符串。嘗試回聲「autocomplete_list.php」直接到腳本的東西的內容是這樣的:

source: <?php include "../../db/autocomplete_list.php"; ?> 

這將應該工作。

+0

想過這個,但是你不能在Javascript中做一個PHP包含。 – Michael

1

最好的辦法是減少對服務器端可能的選項:

$sth = $dbh->query ("SELECT * FROM constants 
        WHERE category='Colors' and value like '.".$_GET['term']."%' 
        ORDER BY display"); 

(與$ _GET [ '術語']通過對SQL注入檢查字符串替換..)

見: http://docs.jquery.com/UI/Autocomplete

+0

進行了更改,但現在自動填充功能不會顯示在我的現場表單中。當我在Firebug上檢查控制檯時,它正確地調用了一切。有任何想法嗎? – Michael

相關問題