数据库返回字符firefox无法看到

goodluckwhh 2010-08-05 05:52:39
一个小功能,利用AJAX技术实现:

1、用户输入
2、使用AJAX技术把用户输入的关键字送给服务器端
3、服务器端查询数据库,并将结果返回给客户端
4、客户端根据服务器端返回的数据向用户提供参考建议。

功能已经实现,使用IE和chrome浏览器都正常,但是firefox浏览器中不正常。交互的代码如下,高手帮忙看下,不胜感激。
客户端

function load_suggest(id, key)
{
var url="suggest.jsp?key="+key;
ajax_rqt=get_request();
ajax_rqt.onreadystatechange = function ()
{
if (ajax_rqt.readyState == 4)
{
if (ajax_rqt.status == 200)
{
var result = ajax_rqt.responseText.replace(/(^\s*)|(\s*$)/g, "");
addOptionGroup(id,result);
}
else
{
alert("您所请求的页面有异常。");
}
}
}
ajax_rqt.open("GET", url, true);
ajax_rqt.send(null);
}

服务器端代码:


userDAO userDaoObj = new userDAO();
boolean firstResult;
firstResult = true;
String result = "";
String key = getString.toString(request.getParameter("key"));
try {
String sqlString = "SELECT * from suggest where key='" + key + "'";
ResultSet rs = userDaoObj.execSql(sqlString);
while(rs.next()){
if (firstResult) {
result = rs.getString("sug");
firstResult = false;
} else {
result = result + "," + rs.getString("sug");
}
}
out.print(result);
}catch(Exception ex){
ex.printStackTrace();
}

上述代码在IE和chrome中工作正常,在FIREFOX中工作不正常,异常表现为:
1、在浏览器中无法看到期望看到的建议信息
2、如果在上述的客户端代码中添加打印语句打印服务器返回的数据,会出现一个没有任何可见字符的打印框,
3、如果在浏览器中输入AJAX请求所请求的完整URL,可以看到一个仅包含服务器端返回的建议内容的网页。


小弟是刚接触WEB编程,望那位大虾不吝赐教,不胜感激
...全文
123 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckwhh 2010-08-06
  • 打赏
  • 举报
回复
问题解决了,还是中文转换的问题,我在JS端没调用encodeURI对URL进行转换,如果做了这个转换,则IE和chrome也都会出问题。
发现这个后,我打印了AJAX请求的URL地址,发现不调用encodeURI对URL进行转换时IE和chrome请求的URL中,中文对应的是2字节编码(就是一个中文字符变成2个%XX的形式),而如果调用了encodeURI进行了转换,则请求的URL中中文对应的是3字节编码,也就是UTF8的编码方式,在服务器端添加了一个UTF8到GB2312的转换函数来取参数,问题就解决了。
hoojo 2010-08-06
  • 打赏
  • 举报
回复

String key = getString.toString(request.getParameter("key"));
//先看看key有没有值,有值有没有乱码或出现空格什么的,导致下面的查询语句没有返回信息
key = URLDecoder.decode(key, "UTF-8");//客户端2次转码服务器端也进行解码
try {
String sqlString = "SELECT * from suggest where key='" + key + "'";
ResultSet rs = userDaoObj.execSql(sqlString);
while(rs.next()){
if (firstResult) {
result = rs.getString("sug");
firstResult = false;
} else {
result = result + "," + rs.getString("sug");
}
}
out.print(result);//打印看看是什么值,可能是空的;和上面的查询有关

js传参编码:
var url="suggest.jsp?key="+encodeURI(encodeURI(key));//客户端转码发送

jimesum1 2010-08-05
  • 打赏
  • 举报
回复
装个Firebug,调试跟踪一下就知道了
licip 2010-08-05
  • 打赏
  • 举报
回复
是的。你得看看fireFox有没有得到服务端传过来的字符。
goodluckwhh 2010-08-05
  • 打赏
  • 举报
回复
我的问题描述里有描述异常显现,
“2、如果在上述的客户端代码中添加打印语句打印服务器返回的数据,会出现一个没有任何可见字符的打印框”,
我是这么添加的:

alert(ajax_rqt.responseText);
var result = ajax_rqt.responseText.replace(/(^\s*)|(\s*$)/g, "");
alert(result);
addOptionGroup(id,result);
shenzhenNBA 2010-08-05
  • 打赏
  • 举报
回复
function load_suggest(id, key)
{
var url="suggest.jsp?key="+key;
ajax_rqt=get_request();
ajax_rqt.onreadystatechange = function ()
{
if (ajax_rqt.readyState == 4)
{
if (ajax_rqt.status == 200)
{
var server_result = ajax_rqt.responseText.replace(/(^\s*)|(\s*$)/g, "");
alert("test: "+server_result);
addOptionGroup(id,result);
}
else
{
alert("您所请求的页面有异常。");
}
}
}
ajax_rqt.open("GET", url, true);
ajax_rqt.send(null);
}

测试红色部分看有没有结果,如果有弹出提示,那说明可能 addOptionGroup() 函数里面有部分不兼容问题而显示不出来而已,
goodluckwhh 2010-08-05
  • 打赏
  • 举报
回复
服务器端编码和页面编码中都是用下边这一句来设置编码方式的
content="text/html; charset=gb2312"
mrshelly 2010-08-05
  • 打赏
  • 举报
回复
检查页面编码以及服务器端编码...

字符集那个编码...

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧