返回列表 發帖

[問題] AutoComplete 搭配 getJSON 疑問 [已解決]

各位高手您好!!

目前是用jsp來撰寫網頁
最近使用了JQuery AutoComplete這 plugin

基本單功能都能實現

但碰到了一個問
例如
$(document).ready(function(){
var autocompleteOpts = {
url:'data.jsp'
}
$('#book').autocomplete(autocompleteOpts);
}
在data.jsp中可以用String key = request.getParameter("q");
取得client端所輸入的值

可是換了另一種形式
例如
$(document).ready(function(){
$.getJSON("data.jsp?callback=?", function(data) {
........................省略

$('#book').autocomplete(autocompleteOpts);
....................... 省略
使用了getJSON之後~在client端輸入值~卻在data.jsp中取不到q的值

之後我修改了一下getJSON 這行
$.getJSON("data.jsp?&q="+$('#book').val()+"&callback=?", function(data) {
在data.jsp的確是可以取得q值,但是
當我在client端輸入L這個key word的時候是沒反應的
之後在輸入一次相關L開頭的key word就會出現相關訊息

也就是說第一次沒反應第二次才會有動作



補充一下:
(1)
我是利用取得這個q值來當做sql語法的key word
"select * from tablename WHERE fieldnaem LIKE '"+key+"%'"
因為資料量相當大~所以想先把database的相關資料先取出~再將資料丟給getJSON
(此方式運作:第一次沒反應第二次才會有動作)

(2)
目前查到的資料大部份都是在後端直接以select * from tablebame
將整個資料取出然後附給getJSON~(若改成此方式目前的功能是可以正常運作的)

在此請教一下 若我希望以(1)的方式來運作
在以下部份code形式中該如何做變化呢??
$(document).ready(function(){
$.getJSON("data.jsp?&q="+$('#book').val()+"&callback=?", function(data) {
     ........................省略

     var autocompleteOpts={
    data:name
    ........................省略
    }

     $('#book').autocomplete(autocompleteOpts);
});
});
若有需要整段程式碼我將附上

謝謝您的回答

[ 本帖最後由 ericvirus 於 2009-10-31 12:40 編輯 ]

我還看不太懂為什麼改用 getJSON() 取資料,是因為想要預先把資料全部存放到 client 端嗎?
To infinity and beyond!

TOP

資料不一定要先放到client端
當cliinet輸入key word時在去後端找資料也是可行的
getJSON() 似乎是先把資料全部往clinet端送

我把整個問題縮小一點~>"<

會想使用getJSON() 的原因是主要是看到他的格式
如[{ name: "jack", id: "001" }, { name: "tom", id: "002" }]

就能夠以~例如row.name或row.id這樣的方式來直接取值
在運作上感覺比較方便些
formatItem: function(row, i, max) {   
                        return row.id + "-" + row.name
}
formatResult: function(row, i, max) {   
                        return row.id
}
當我在clinet端時輸入0就會列出
001-jack
002-tom

選擇001-jack這選項時
ID欄位只會填入001 Name欄位填入jack
(欄位是只input text)
以getJSON()方式已成功

在此請教一下
若不用 getJSON() 這方式~
是否要做字串的切割~感覺回傳的數據是一大段的字串

若要實現上述的功能有什麼比較好的方法跟建議呢

謝謝您的回答

[ 本帖最後由 ericvirus 於 2009-10-28 09:54 編輯 ]

TOP

嗯,大致瞭解你想做的,不過 autocomplete 取資料的動作是包裝起來的,所以如果你要自己做取資料的動作,似乎比較不符合這個 plugin 的設計原意。

你還是可以回傳一行一行的字串後,自己做字串切割,或是每一行都是一個 JSON 格式的字串,先 eval() 後,一樣可以用你說的方式 row.id, row.name 去取值。
To infinity and beyond!

TOP

感謝wmh的建議
目前先捨棄getJSON()的用法
改用取得整個字串後~再切割

在讀取方面也比getJSON()來的快

再次感謝

TOP

返回列表 回復 發帖