查看完整版本: [-- ajax给servlet传递中文参数的问题 --]

风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› ajax给servlet传递中文参数的问题 登录 -> 注册

1F ajax给servlet传递中文参数的问题   miracle Post by : 2008-06-25 17:52:57.0

现在做一个像google搜索那样,输入词会出现词语联想,如我我输入“中国”他就会把以中国开头的下拉出来,我做一个但是传递英文没有问题,传递中文就就不会返回(保证数据库里有内容,输出他的SQL语句,在mysql的控制台可以执行,并能查询出结果),传递中文参数(可以正确输出中文参数),并且while语句就不执行,望帮忙,在线等。贴出原代码:
JSP页面:
<%@   page   contentType="text/html;charset=GB2312"   language="java"   %>
<HTML> <HEAD> <TITLE> ajax </TITLE>
<META   http-equiv=Content-Type   content="text/html;   charset=GB2312">
<LINK   href="images/css.css"   type=text/css   rel=stylesheet>
</HEAD>
<script   language="javascript">
var   XMLHttpReq;
        var   completeDiv;
        var   inputField;
        var   completeTable;
        var   completeBody;
  //创建XMLHttpRequest对象               
        function   createXMLHttpRequest()   {
if(window.XMLHttpRequest)   {   //Mozilla   浏览器
XMLHttpReq   =   new   XMLHttpRequest();
}
else   if   (window.ActiveXObject)   {   //   IE浏览器
try   {
XMLHttpReq   =   new   ActiveXObject("Msxml2.XMLHTTP");
}   catch   (e)   {
try   {
XMLHttpReq   =   new   ActiveXObject("Microsoft.XMLHTTP");
}   catch   (e)   {}
}
}
}
//发送匹配请求函数
        function   findNames()   {
                inputField   =   document.getElementById("names");                        
                completeTable   =   document.getElementById("complete_table");
                completeDiv   =   document.getElementById("popup");
                completeBody   =   document.getElementById("complete_body");
                if   (inputField.value.length   >   0)   {
                        createXMLHttpRequest();   
                        var   url   =   "AutoCom?action=match&names="   +   inputField.value;                                                
                        XMLHttpReq.open("POST",   url,   true);
                        XMLHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                        XMLHttpReq.onreadystatechange   =   processMatchResponse;//指定响应函数
                        XMLHttpReq.send("POST");   //   发送请求
                }   else   {
                        clearNames();
                }
        }
//   处理返回匹配信息函数
        function   processMatchResponse()   {
        if   (XMLHttpReq.readyState   ==   4)   {   //   判断对象状态
        alert(XMLHttpReq.status);
                if   (XMLHttpReq.status   ==   200)   {   //   信息已经成功返回,开始处理信息
                                        setNames(XMLHttpReq.responseXML.getElementsByTagName("res"));
                        }else   {   window.alert("您所请求的页面有异常。");
                        }
                }
        }
//生成与输入内容匹配行
                  function   setNames(names)   {                        
                        clearNames();
                        var   size   =   names.length;
                        setOffsets();

                        var   row,   cell,   txtNode;
                        for   (var   i   =   0;   i   <   size;   i++)   {
                                var   nextNode   =   names[i].firstChild.data;
                                row   =   document.createElement("tr");
                                cell   =   document.createElement("td");
                                
                                cell.onmouseout   =   function()   {this.className='mouseOver';};
                                cell.onmouseover   =   function()   {this.className='mouseOut';};
                                cell.setAttribute("bgcolor",   "#FFFAFA");
                                cell.setAttribute("border",   "0");
                                cell.onclick   =   function()   {   completeField(this);   }   ;                                                           

                                txtNode   =   document.createTextNode(nextNode);
                                cell.appendChild(txtNode);
                                row.appendChild(cell);
                                completeBody.appendChild(row);
                        }
                }
//设置显示位置                                 
                function   setOffsets()   {
                        completeTable.style.width   =   inputField.offsetWidth;   +   "px";
                        var   left   =   calculateOffset(inputField,   "offsetLeft");
                        var   top   =   calculateOffset(inputField,   "offsetTop")   +   inputField.offsetHeight;
                        completeDiv.style.border   =   "black   1px   solid";
                        completeDiv.style.left   =   left   +   "px";
                        completeDiv.style.top   =   top   +   "px";
                }
  //计算显示位置               
        function   calculateOffset(field,   attr)   {
            var   offset   =   0;
            while(field)   {
                offset   +=   field[attr];   
                field   =   field.offsetParent;
            }
            return   offset;
        }
//填写输入框
        function   completeField(cell)   {
                inputField.value   =   cell.firstChild.nodeValue;
                clearNames();
        }
//清除自动完成行
        function   clearNames()   {
                var   ind   =   completeBody.childNodes.length;
                for   (var   i   =   ind   -   1;   i   > =   0   ;   i--)   {
                          completeBody.removeChild(completeBody.childNodes[i]);
                }
                completeDiv.style.border   =   "none";
        }
        }
</script>
<table     style="BORDER-COLLAPSE:   collapse"   borderColor=#111111   
                        cellSpacing=0   cellPadding=2   width=400     border=0>
        <TR>
                  <TD   align=middle   height=4   colspan="3">
  </TD>
</TR>
<TR>
              <TD   align=middle   
                                        height=19   colspan="3"> <B> 搜索 </B>
      </TD>
</TR>
<tr>
                <td   height="20">
输入关键字:
</td>
<td   height="20">
  <input   type="text" size="15"   id="names"   onkeyup="findNames();"   style="height:20;">
        <div   style="position:absolute;"   id="popup">
                <table   id="complete_table"     border="0"   cellspacing="0"   cellpadding="0"/>                        
                        <tbody   id="complete_body"> </tbody>
                </table>
        </div>
</td>
        </tr>
</table>
servlet代码:
package   org.ajax;

import   java.io.IOException;
import   java.net.*;
import   java.io.PrintWriter;
import   java.sql.ResultSet;
import   java.sql.SQLException;
import   javax.servlet.ServletConfig;
import   javax.servlet.ServletException;
import   javax.servlet.http.HttpServlet;
import   javax.servlet.http.HttpServletRequest;
import   javax.servlet.http.HttpServletResponse;

public   class   AutoCom   extends   HttpServlet   {

        protected   void   doPost(HttpServletRequest   request,   HttpServletResponse   response)
        throws   ServletException,   IOException   {
        //设置接收信息的字符集
        request.setCharacterEncoding("GB2312");            
                response.setContentType("text/xml;   charset=GB2312");
                response.setHeader("Cache-Control",   "no-cache");
String   action   =   request.getParameter("action");
System.out.println("hello:"+action);
String   name   =   StringUtil.getDecoding("names",   request);
System.out.println("1111111:"+name);
                PrintWriter   out   =   response.getWriter();
                //依据验证结果输出不同的数据信息
                out.println(" <response> ");
                DB   db   =   new   DB();
ResultSet   rs;
                String   strSql=null;
                //匹配
                            try   {
if   ("match".equals(action)){
strSql   =   "select   name   from   product   where   name   like   '"+name+"%'";
        rs   =   db.executeQuery(strSql);
                                                                              while(   rs.next())   {                       out.println(" <res> "   +   rs.getString("name")   +   " </res> ");
        }
                }
                System.out.println("eeeeeeeeeeeeee");
out.println(" </response> ");
//out.close();
                }   catch   (SQLException   e)   {
System.out.println("33333333");
e.printStackTrace();
}
        }
}
 

2F    唧唧 Post by : 2008-06-25 18:00:27.0

js 传递中文  用 encodeURIComponent 编码一下

var   url   =   "AutoCom?action=match&names="   +   encodeURIComponent(inputField.value); 

/5b016f381a690317011a75b568930006.jhtml

3F    miracle Post by : 2008-06-26 16:23:34.0

不行啊。。。

4F    唧唧 Post by : 2008-06-26 16:46:19.0

StringUtil.getDecoding 是啥东西?  request.getParameter 不就行了么?

5F    miracle Post by : 2008-06-26 17:44:36.0

 我用 request.getParameter

还是不行啊?

6F    唧唧 Post by : 2008-06-26 17:58:22.0

我倒~

你用 Eclipse 跟踪一下 System.out.println("1111111:"+name);  看看能否输出中文呀,看看到底是啥问题

7F    miracle Post by : 2008-06-27 09:09:50.0

问题解决了, ooo

嘿嘿。。。

我只在servlet里面加上了下面3句:request.setCharacterEncoding("UTF-8");   response.setContentType("text/xml;charset=UTF-8");

response.setCharacterEncoding("UTF-8");

去掉了两句: request.setCharacterEncoding("GB2312");        response.setContentType("text/xml;   charset=GB2312");
 

8F    miracle Post by : 2008-06-27 09:10:31.0

嘿嘿。。。好高兴哦 

9F    唧唧 Post by : 2008-06-27 09:25:27.0

哈哈~ 我晕,不要搞混乱了编码

做J2EE建议还是用UTF-8,我一直都没用过gb2312

10F    miracle Post by : 2008-06-27 15:09:14.0

我第一次写软件,所以不知道用什么好啊


风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› ajax给servlet传递中文参数的问题 登录 -> 注册

查看完整版本: [-- ajax给servlet传递中文参数的问题 --]
CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 8 ms,0 (Queries)  Gzip enabled
粤ICP备07511478号