我最近也在研究這個MOD
我的實驗環境
PHP+MYSQL(全採UTF-8編碼)
方法一(寫死)
在HTML的陣列裡面取資料
方法二(寫死)
透過AJAX取得你的動態檔案(php..asp..)
(但實際上還是把HTML的陣列資料放到php..asp..檔案而已)
方法三(自創)(從資料庫取得資料)
目前我碰到一些問題--假設資料庫有下列5筆資料
a許功蓋
a許不蓋
a許大概
許功蓋
許小蓋
當我在文字框中輸入a時--會出現(開頭是英文都沒問題)
a許功蓋
a許不蓋
a許大概
讓我選取--當選娶某一個值時--pop警告視窗也會說我抓到了正確的值
但(開頭是中文就會有問題)
當我打'許'而已時--卻不會出現
許功蓋
許小蓋
讓我選取--取而代之的是錯誤訊息Illegal mix of collations (utf8_general_ci,IMPLICIT) and (big5_chinese_ci,COERCIBLE) for operation 'like'
很明顯這是編碼錯誤造成欄位資料無法匹配的問題--有兩個解決辦法
方法A:將資料庫中匹配欄位的那個屬性改成big5_chinese_ci(utf8_general_ci是我原來的)
方法B:將
var url = options.url + "?q=" + encodeURI(q);
url += "&" + i + "=" + encodeURI(options.extraParams[i]);
分別改成
var url = options.url + "?q=" + escape(q);
url += "&" + i + "=" + escape(options.extraParams[i]);
就不會出現上述問題
這次我再打'許'或任何開頭中文的字--少了錯誤訊息--但還是沒出現應該要出現的選項--什麼都沒發生
請問有沒有人有這方面的相關實例
希望各位多指教 看起來是資料庫編碼的問題,和 jQuery 無關。
如果都是 utf-8 的編碼,應該不會有上述的問題,你可以試著先在 server 端的 php 程式把正確的資料撈出來後,再來套前端的 UI。
你去資料庫撈資料的語法是自己寫的嗎?
會不會在開啟資料庫連線後忘了指定編碼:
[code php]mysql_query('SET NAMES utf8');[/code] 是的
全部都是utf-8編碼
mysql_query('SET NAMES big5' );
mysql_query("SET NAMES utf8' );
我都試過了--不過都是一樣的狀況
我可否把我的檔案跟資料庫結構傳一份給您
您幫我看看好嗎
因為我研究真的研究了很久了
就是中文首字問題沒法解決
如果可以的話--看是傳MAIL或是連結都可^^||
DEMO網址如下
[url]http://59.124.2.38/autocomplete/autocomplete.html[/url]
[[i] 本帖最後由 bau720123 於 2009-3-10 15:05 編輯 [/i]] ok 你可以用網頁最下面的「聯繫我們 」的 email,或是你把檔案放到某個地方,再用「發短消息」的功能傳送給我即可,我會試著幫你看一下問題在哪。 信件已寄出
內有完整使用說明
輸入資料時
可以隨便打a or c or d or 包 or 許
等字串
現在英文是OK的~中文就如您所知到的狀況一樣
再次感謝 我發現資料傳到 server 端會被編碼,
許功蓋會變成 "%u8A31%u529F%u84CB" 的字串,
所以要再用以下的方式取為原字串:
[code php]
$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));
[/code] 目前我把網頁也變成了UTF-8
php,ini裡面也設定default_charset = "UTF-8"
以下是在不同的程式語法下測試的狀況
也麻煩您再幫我看一次
測試環境--自己電腦上的瀏覽器(IE跟FF)
您的意思是說把
$q = strtolower($_GET["q"]);
替換成
$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));
嗎
但結果在伺服器上沒什麼變化ㄟ
我準備了兩個版本
autocomplete_ajax.php是沿用原來的$q = strtolower($_GET["q"]);
autocomplete_ajax1.php是沿用新的$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));
包=
[url]http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=包[/url]
[url]http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=%A5][/url]
[url]http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=包[/url]
[url]http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=%A5][/url]
許=
[url]http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=許[/url]
[url]http://59.124.2.38/autocomplete/autocomplete_ajax.php?q=%B3\[/url]
[url]http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=許[/url]
[url]http://59.124.2.38/autocomplete/autocomplete_ajax1.php?q=%B3\[/url]
前台測試網址
[url]http://59.124.2.38/autocomplete/autocomplete.html[/url]
[url]http://59.124.2.38/autocomplete/autocomplete1.html[/url]
[[i] 本帖最後由 bau720123 於 2009-3-11 12:27 編輯 [/i]] 我把我目前可運作的程式完整寄回給你看看。
所有的檔案資料都以 UTF-8 來做,
包含你原本的 autocomplete.html 也轉成 UTF-8 編碼。 我收到您的來信了
真的可以執行了
中文首字偵測也沒問題
我大概知道我哪些地方跟您這個版本設定的不一樣之處了
最後一個小問題希望您能給我一些建議
像打英文時--比方'a'--打完的那一剎那它自己會感應出應對的資料
但中文似乎有點兩光--比方打完'包'時--資料不會立即出來
這時要鍵盤上的方向鍵左或右動一下--這時才會感應出應對的資料
這跟字元碼有什麼相關的因素影響嗎???
希望能聽聽看您的看法跟建議
然後我再朝那個方向先自行去研究
真的不行時再上來論壇請教
再次謝謝您
PS
後記
後來我發現這個狀況目前在FF才會有這樣的狀況
IE我的版本是6是會立即自動感應的
[[i] 本帖最後由 bau720123 於 2009-3-12 11:35 編輯 [/i]] 中文輸入的部份,可能和輸入法有關係喔,我這邊看起來是都還蠻順的,不會需要左右鍵動一下才出現資料。我是用酷音和雅虎奇摩輸入法,兩個都正常。 很明顯啊,你的問題出在輸入時不是用 \n 換行,而是用 html 的 <br/> 換行:
[code vb]
Response.Write(data[a] + "<br/>");
[/code]
上面這一行應該改成:
[code vb]
Response.Write(data[a] + "\n");
[/code] 了解謝謝您低說明
再次感謝
使用JSP提供資料
大大你好,我是用JSP提供資料JSP檔如下程式碼
接收頁可以顯示資料沒問題
但當我在輸入框輸入 a 時
應該是只有出現2個選項
不過卻四個選項都出來了
繼續再輸入 b
又變成只剩一個選項了(abc)
有人用jsp來提供資料,有問題的嗎??[code]<%@ page contentType="text/html; charset=big5" language="java" errorPage="" %>
<%
out.print("abc\n");
out.print("babc\n");
out.print("cabc\n");
out.print("aabc\n");
%>[/code] server 端用哪種語言應該都不是問題喔,只要正確地將資料一行一行輸出即可。
你要貼出比較完整的程式碼嗎?上面這一段看不太出來問題在哪。
管理员,这个问题怎么解决呀?一直没搞好
按照jquery中的实例做的,jsp页面中的javascript上:[code]$().ready(function() {$("#home_address").autocomplete('getJdtype.do', {
minChars: 0,
width: 310,
matchContains: true,
autoFill: false,
formatItem: function(row, i, max) {
return i + "/" + max + ": \"" + row.name + "\" [" + row.to + "]";
},
formatMatch: function(row, i, max) {
return row.name + " " + row.to;
},
formatResult: function(row) {
return row.to;
}
});
}[/code]控制器中:[code]public void getJdtype(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String parent = request.getParameter("q");
//int count=0;
String str = "";
List<Map> list;
if(StringUtils.isBlank(parent)){
//count=0;
//str=String.valueOf(count);
return;
}else{
list = getTDkindByTG(Integer.valueOf(parent));
//count=list.size();
//str=String.valueOf(count);
for(Map map :list){
String name=String.valueOf(map.get("kindremark"));
String id=String.valueOf(map.get("acceptdkindid"));
str += "{ name: \""+name+"\", to: \""+id+"\" },\n";
}
}
str = "[" + str + "]";
System.out.println(str);
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(str);
}[/code]页面显示部分,总是提示“undefined”
我在页面中直接调试http://localhost:8088/project/getJdtype.do?q=4
显示的内容为:
[{ name: "催促揽", to: "13" }, { name: "催送发票(底单)", to: "38" }, { name: "催送单", to: "39" }, { name: "(底单)", to: "43" }, ]
是不是要显示成数组形式,而不是字符串呢,但动态数组不知道各位是如何实现的。盼。。。。。。 我看了一下實做的內容,有兩個地方需要調整,第一個是 server 端輸出的資料,要改成一行一組資料的方式:[code]{ name: "催促揽", to: "13" }
{ name: "催送发票(底单)", to: "38" }
{ name: "催送单", to: "39" }
{ name: "(底单)", to: "43" }[/code]再來是 client 端的部份,接到的 row 必須再處理一次:
[code js]
formatItem: function(row, i, max) {
var row = eval('(' + row + ')');
return i + "/" + max + ": \"" + row.name + "\" [" + row.to + "]";
},
formatMatch: function(row, i, max) {
var row = eval('(' + row + ')');
return row.name + " " + row.to;
},
formatResult: function(row) {
var row = eval('(' + row + ')');
return row.to;
}
[/code]
這樣應該就可以囉...
回復 50# 的帖子
DEAR 版大:我也遇到相同的問題,但是我是用jsp & servlet來做的,
我的進度到了#41,用英文都沒有問題,但是用中文的話,
在後端就變成會得到???的值,
因為看bau720123已經解決了,
但是我對php不熟,所以不知道您寫的那一段是在做什麼?如下:
能否幫我解決這個問題,感恩!
$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]')); [code php]
$q = join('', json_decode('["'. strtr($_GET['q'], '%u', '\u') . '"]'));[/code]
這一段是:
[list=1]
[*]先取得 GET 傳來的 q 這個變數
[*]把 %u 轉成 /u
[*]然後前後加上方括號
[*]將 JSON 轉回 Array
[*]再把 Array 接起來轉回字串
[/list]
你可以在 [url]http://json.org/[/url] 取得 Java 處理 JSON 的 class
回復 60# 的帖子
謝謝大大,已經可以了!:lol wmh,您好,我使用jquery autocomplete的時候碰到了一點問題。代碼如下:
<link rel="stylesheet" href="/5xun5mi/css/jquery.autocomplete.css" type="text/css"></link>
<script src="http://www.google.com/jsapi" ></script>
<script language="javascript" type="text/javascript" >
google.load("jquery", "1");
</script>
<script type="text/javascript" src="/5xun5mi/js/jquery.autocomplete.js" defer="defer" charset="GBK"></script>
<script language="javascript" type="text/javascript" charset=GBK>
[color=Red] $("#searchtext").autocomplete("/5xun5mi/jsp/get_tip_data.jsp");[/color]
</script>
在[color=Red]IE[/color]中運行時,總是提示紅色標注的哪行有錯,[color=Red]錯誤信息是:對象不支持此屬性或方法[/color]。
然而在Firefox中運行是正常的,其錯誤控制台也沒有任何錯誤信息。
望wmh指教,謝謝!