Ajax乱码

AJAX中文乱码问题的解决方法有两种:

(1)页面端数据作一次encodeURI,服务器端稍作改变即可

面面端verify.js脚本:

view plaincopy to clipboardprint?
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;  
}
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;
}

服务器端的程序稍作修改即可,对字符串用指定方式编码:

view plaincopy to clipboardprint?
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();  
        }  
    }  
}
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的脚本:

view plaincopy to clipboardprint?
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;  
}
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);的解码工作,服务器端只作一次的解码工作就可以了,因为在浏览器的内部还会做一次解码,所以服务器只作一次就可以了

view plaincopy to clipboardprint?
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();  
        }  
    }  
}

转载:偷星九月天漫画免费阅读

猜你喜欢

转载自siaslance.iteye.com/blog/1488819