17_解决Ajax中文乱码与跨域访问
2009-01-25 12:03
344 查看
AJAX中文乱码问题的解决方法有两种:
(1)页面端数据作一次encodeURI,服务器端稍作改变即可
面面端verify.js脚本:
服务器端的程序稍作修改即可,对字符串用指定方式编码:
******************************************
(2)解决中文乱码问题:页面端发出的数据作两次encodeURI,服务器作一URLDecoder.decode(old,UTF-8)
页面端verify.js的脚本:
服务器端的数据作一次URLDecoder.decode(old,UTF-8);的解码工作,服务器端只作一次的解码工作就可以了,因为在浏览器的内部还会做一次解码,所以服务器只作一次就可以了
(1)页面端数据作一次encodeURI,服务器端稍作改变即可
面面端verify.js脚本:
function verify() { //1.接收html数据 //解决中文乱码问题的方法:1页面端发出的数据作一次encodeURI,服务器端使用 //解决中文乱码问题的方法:2页面端发出的数据作两次的encodeURI,服务器端作一次URLDecoder.decode(old,"UTF-8"); var url ="AJAXServer?name="+encodeURI($("#userName").val());//页面端发出的数据作一次encodeURI url = convertURL(url); $.get(url,function (data) { $("#result").html(data); }); //2.对数据进行发送 //3.回调函数 } function convertURL(url) { var timetamp = (new Date()).valueOf(); if(url.indexOf("?")>=0) { url=url+"&t"+timetamp; } else { url=url+"?t"+timetamp; } return url; }
服务器端的程序稍作修改即可,对字符串用指定方式编码:
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; /** * Created by IntelliJ IDEA. * User: Administrator * Date: 2009-1-5 * Time: 21:26:55 * To change this template use File | Settings | File Templates. */ public class AJAXServer extends HttpServlet { protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { doGet(httpServletRequest, httpServletResponse); } protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { //写校验代码 try{ httpServletResponse.setContentType("text/html;charset=utf-8"); PrintWriter out = httpServletResponse.getWriter(); Integer inte = (Integer)httpServletRequest.getSession().getAttribute("total"); int temp = 0; //1.取参数信息 if (inte == null) { temp = 1; } else { temp = inte.intValue() + 1; } httpServletRequest.getSession().setAttribute("total",temp); String old = httpServletRequest.getParameter("name"); String name = new String(old.getBytes("iso8859-1"),"UTF-8");//服务器稍作修改即可,用指定方式编码 //2.检查参数是否有问题 if(old == null || old.length() == 0){ out.println("用户名不能为空"); } else{ //3.校验操作 if(name.equals("wangxingkui")){ //4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户 //写法没有变化,本质发生了改变 out.println("用户名[" + name + "]已经存在,请使用其他用户名, " + temp); } else{ out.println("用户名[" + name + "]尚未存在,可以使用该用户名注册, " + temp); } } } catch(Exception e){ e.printStackTrace(); } } }
******************************************
(2)解决中文乱码问题:页面端发出的数据作两次encodeURI,服务器作一URLDecoder.decode(old,UTF-8)
页面端verify.js的脚本:
function verify() { //1.接收html数据 //解决中文乱码问题的方法:1页面端发出的数据作一次encodeURI,服务器端使用 //解决中文乱码问题的方法:2页面端发出的数据作两次的encodeURI,服务器端作一次URLDecoder.decode(old,"UTF-8"); var url ="AJAXServer?name="+encodeURI(encodeURI($("#userName").val()));//页面端的数据作两次encodeURI url = convertURL(url); $.get(url,function (data) { $("#result").html(data); }); //2.对数据进行发送 //3.回调函数 } function convertURL(url) { var timetamp = (new Date()).valueOf(); if(url.indexOf("?")>=0) { url=url+"&t"+timetamp; } else { url=url+"?t"+timetamp; } return url; }
服务器端的数据作一次URLDecoder.decode(old,UTF-8);的解码工作,服务器端只作一次的解码工作就可以了,因为在浏览器的内部还会做一次解码,所以服务器只作一次就可以了
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; /** * Created by IntelliJ IDEA. * User: Administrator * Date: 2009-1-5 * Time: 21:26:55 * To change this template use File | Settings | File Templates. */ public class AJAXServer extends HttpServlet { protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { doGet(httpServletRequest, httpServletResponse); } protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { //写校验代码 try{ httpServletResponse.setContentType("text/html;charset=utf-8"); PrintWriter out = httpServletResponse.getWriter(); Integer inte = (Integer)httpServletRequest.getSession().getAttribute("total"); int temp = 0; //1.取参数信息 if (inte == null) { temp = 1; } else { temp = inte.intValue() + 1; } httpServletRequest.getSession().setAttribute("total",temp); String old = httpServletRequest.getParameter("name"); String name = URLDecoder.decode(old,"UTF-8");//这是服务器端做的一次解码工作 //2.检查参数是否有问题 if(old == null || old.length() == 0){ out.println("用户名不能为空"); } else{ //3.校验操作 // String name = old; if(name.equals("wangxingkui")){ //4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户 //写法没有变化,本质发生了改变 out.println("用户名[" + name + "]已经存在,请使用其他用户名, " + temp); } else{ out.println("用户名[" + name + "]尚未存在,可以使用该用户名注册, " + temp); } } } catch(Exception e){ e.printStackTrace(); } } }
相关文章推荐
- dhl:ajax无法跨域改用getJSON(解决服务器返回json数据中文为乱码的问题$.ajaxSetup({ scriptCharset: "utf-8" , contentType: "application/json; chars)
- ajax学习第二天——ajax框架,juery的实现xml,中文乱码与跨域访问
- vs2005 ajax发布网站,中文获取值为乱码,并且IIS中运行ASPX时服务器应用程序不可用-解决
- ajax中文乱码解决
- SpringMVC ajax中文乱码的解决办法
- php接收ajax中文,后台乱码解决办法
- SSM框架——SpringMVC中使用@ResponseBody注解返回值,Ajax取得中文乱码解决方法
- jquery ajax 解决中文乱码问题
- AJAX中文乱码PHP完美解决(IE和Firefox兼容)
- J2EE ajax中文乱码解决
- Ajax解决中文乱码问题
- Thinkphp调用ajaxReturn中文乱码解决办法
- SVN+Apache在windows下http访问 显示中文乱码问题的解决方法
- NetBox环境下ajax用get获取数据,中文乱码的问题解决:对象不支持此属性或方法: 'Response.CharSet'
- Ajax解决中文乱码问题
- spring3mvc中使用ajax传json中文乱码解决
- JAVA中应用AJAX的中文乱码问题的解决
- 解决ASP.NET AJAX在frame及iframe中跨域访问的问题
- ajax跨域请求js拒绝访问的解决方法
- 解决ajax.net 1.0中文乱码问题