Ajax中文乱码问题解决方案

方案一:

页面端发出的数据做一次encodeURI,服务器端使用new String(name.getBytes("iso8859-1"),"UTF-8");

方案二:

页面端发出的数据做两次encodeURI,服务器端使用URLDecoder.decode(name,"UTF-8");

方案二较好。

页面端js代码源码:

function verify() { // jquery查询节点的方法 var jqueryObj = $("#username"); // 获取文本框中用户输入的数据 var username = jqueryObj.val(); //var url = "servlet/CheckServlet?username=" + encodeURI(username); var url = "servlet/CheckServlet?username=" + encodeURI(encodeURI(username)); url = convertUrl(url); // alert(username); // 将数据发送给服务器的servlet $.get(url, null, callback); } // 加上时间戳 function convertUrl(url) { var timestamp = (new Date()).valueOf(); if (url.indexOf("?") >= 0) { url = url + "&t=" + timestamp; } else { url = url + "?t=" + timestamp; } return url; } // 回调函数 function callback(data) { // alert("收到服务器返回的数据"); // alert(data); var resultObj = $("#result"); resultObj.html(data); }

服务器端serlvet源码:

package ajax.servlet; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author Thinkpad * */ public class CheckServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String name = request.getParameter("username"); //name = new String(name.getBytes("iso8859-1"),"UTF-8"); name = URLDecoder.decode(name,"UTF-8"); out.print("我是服务器,收到客户端的数据:"+name); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }

你可能感兴趣的:(Ajax,String,function,服务器,url,callback)