`

Ajax通过POST方法发送中文信息乱码解决

阅读更多

开发项目用Ajax的Post方法提交信息到请求的servlet,输出遇到中文乱码,纠结了好几天,总结了网络上很多高手的心得,用了两步解决了乱码:

  1. 在JS端,对提交的字符串进行两次编码:
    <%@page contentType="text/html" pageEncoding="gbk"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=gbk">
            <title>JSP Page</title>
    
            <script type="text/javascript">
                var req;
                function validate() {
                    //获取表单提交的内容
                    var idField = document.getElementById("userName").value;
    				//要发送的字符串数据
                    var content = "id=hello&message=" + idField + "&say=我是帅哥";
                    
    				//重点:对content含中文字符的字符串进行两次编码
                    content = encodeURI(content);
                    content = encodeURI(content);
                    var url = "validate.do";
                    //创建一个XMLHttpRequest对象req
                    if(window.XMLHttpRequest) {
                        //IE7, Firefox, Opera支持
                        req = new XMLHttpRequest();
                    }else if(window.ActiveXObject) {
                        //IE5,IE6支持
                        req = new ActiveXObject("Microsoft.XMLHTTP");
                    }
    
                    req.open("post", url, true);
                    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                    req.onreadystatechange = callback;
                    //send函数发送请求,参数
                    req.send(content);
                }
    
                function callback() {
                    //alert(req.readyState);
                    //alert(req.status);
                    if(req.readyState == 4 && req.status == 200) {
                        //alert(req.status);
                        //alert(req.responseText);
                        var check = req.responseText;
                        show (check);
                    }
                }
    
                function show(str) {
                    document.getElementById("info").innerHTML = str;
                }
            </script>
        </head>
        <body>
            <h1>Test Ajax</h1><p>
            <form action="" method="get" name="form">
                <br>
                输入用户名:
                <input type="text" size="10" maxlength="8" id="userName" name="name" onblur="validate()">
                <span id="info"></span>
                <br>
                输入商品名:
                <input type="submit" name="refer" >
            </form>
        </body>
    </html>
     
  2. 在servlet端,对接收的数据的进行一次解码:
    package com.model;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.net.URLDecoder;
    
    /**
     *
     * @author Gavin
     */
    public class DoAjaxServlet extends HttpServlet {
       
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=gbk");
            request.setCharacterEncoding("gbk");
            PrintWriter out = response.getWriter();
            try {
                response.setHeader("Cache-Control", "no-store");
                response.setHeader("Pragma", "no-cache");
                response.setDateHeader("Expires", 0);
    			//这里有个小问题:如果写成String put = null;将会输出一个null后面再加上增加的字符
                String put = "";
                for(Enumeration<String> e = request.getParameterNames(); e.hasMoreElements(); ) {
                    String h = (String) e.nextElement();
                    String c = (String)request.getParameter(h);
                    put += c;
                    
                }
    			//重点在这里,对接受到的信息进行解码
                String putDecoded = java.net.URLDecoder.decode(put,"utf-8");
                System.out.println(pute);
                out.write("message is:" + putDecoded);
            } finally { 
                out.close();
            }
        } 
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        } 
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
    
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    
    }
    
     
0
0
分享到:
评论

相关推荐

    c# ajax post数据乱码解决

    在开发过程中,尤其是在使用C#与ASP.NET进行Web开发时,经常会遇到客户端通过Ajax向服务器端发送Post请求后,服务器端接收到的数据出现乱码的问题。这种情况不仅影响用户体验,也可能会导致程序逻辑出现问题。本文将...

    Ajax中文乱码问题解决方案

    在IT行业中,Ajax(Asynchronous JavaScript ...通过理解和应用这些解决方案,开发者可以有效地避免和解决Ajax请求中的中文乱码问题,从而提高用户体验。记住,良好的编码习惯和对字符编码的理解是解决此类问题的关键。

    AJAX在Post中文的时候解决乱码的方法

    ### AJAX在POST中文时解决乱码的方法 #### 一、问题背景 在使用AJAX进行数据请求时,尤其是在处理中文字符的过程中,经常会遇到一个常见问题:即通过AJAX请求得到的`responseText`中的中文字符出现乱码。这个问题...

    ajax提交中文乱码解决方法

    ### AJAX提交中文乱码解决方法 在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过JavaScript发起异步请求,与服务器进行数据交换,从而...

    ajax乱码解决方案

    **Ajax 乱码解决方案** Ajax 乱码问题在开发Web应用程序时经常遇到,尤其是在涉及到不同编码格式时。本文将深入探讨Ajax与字符编码相关的技术细节,并提供几种有效的解决策略。 首先,JavaScript处理字符的方式是...

    ajax提交,后台中文乱码解决

    本文将基于提供的文件信息,详细解析两种解决Ajax提交后台取值中文乱码的方法。 ### 方法一:使用URL编码 在第一个示例中,开发者通过调用`encodeURIComponent()`或`encodeURI()`函数对请求URL中的参数进行编码。...

    ajax中文乱码如何解决

    在本文中,我们将深入探讨如何解决使用Ajax进行POST请求时出现的中文乱码问题。首先,我们要理解Ajax中文乱码的根源,它通常涉及到字符编码的不一致,尤其是在客户端与服务器之间的通信过程中。 Ajax(Asynchronous...

    Ajax中文乱码问题解决方法

    这个项目可能包含了用于模拟中文乱码问题的测试用例,以及对应的解决方法。通过运行和分析这些测试,开发者可以更好地理解如何在实际项目中解决此类问题。 总的来说,解决Ajax中文乱码问题的关键在于明确和统一字符...

    JQuery的Ajax中Post方法传递中文出现乱码的解决方法

    2.解决JQuery的Ajax中Post方法传递中文出现乱码的方法: a.使用JavaScript的escape()函数处理:在传递中文参数之前,使用escape()函数对参数进行处理。这样可以将中文字符转换为十六进制数,避免了在传输过程中...

    ajax到servlet乱码解决

    例如,我们使用 AJAX 通过 URL 传递中文参数 "中文测试" 给 Servlet,Servlet 在接收参数时却变成了乱码 "�������"。这使得我们的应用程序无法正确地处理中文参数。 解决方案 要解决这个问题,我们可以从两...

    AJAX在Post中文的时候乱码的解决方法

    AJAX在Post中文的时候乱码的解决方法 AJAX(Asynchronous JavaScript and XML)是一种在Web开发中用于实现异步数据交换的技术,但是在使用AJAX进行POST操作时,遇到中文乱码的问题是一种常见的现象。这种问题的出现...

    Struts框架下Ajax发送中文乱码问题的解决

    总结来说,解决Struts框架下Ajax发送中文乱码问题的关键在于: 1. 确保Ajax请求时设置正确的`Content-Type`,以UTF-8编码发送数据。 2. 在Struts配置文件中配置`CharacterEncodingFilter`或在Action中手动设置请求...

    ajax get请求中文参数乱码解决

    在进行Web开发时,我们经常会遇到Ajax GET请求发送中文参数时出现乱码的问题。这个问题主要源于HTTP协议在处理非ASCII字符时的编码不一致。在本文中,我们将深入探讨这个问题,以及如何通过不同的方法来解决它。 ...

    Ajax 中文乱码问题

    通过以上介绍的方法,我们可以有效地解决Ajax请求过程中可能出现的中文乱码问题。关键在于确保数据在发送和接收过程中的编码一致性。希望本文能帮助开发者更好地理解和处理这类问题,提升用户体验。

    ajax POST 与GET提交的区别

    - **POST**: 同样存在乱码问题,可以通过设置Content-Type和服务器端编码来解决。 7. **实现细节**: - **GET**: 参数直接拼接在URL后面,如 `http://example.com?name=value`。 - **POST**: 需要通过设置Content...

    Ajax使用POST提交中文乱码问题.docx

    在使用Ajax进行POST提交时,中文字符可能会遇到乱码问题,这是因为数据在传输过程中编码与解码不匹配导致的。Ajax以UTF-8编码发送数据,但服务器端可能使用了不同的字符集(如GB2312)来解析,这就产生了乱码。本文...

    ajax乱码解决汇总

    本文将深入探讨Ajax乱码问题的成因及其解决方案。 首先,我们需要了解JavaScript和Unicode的关系。JavaScript内部处理字符时,采用的是Unicode编码,这是一种包含几乎全球所有语言字符的通用编码标准。而UTF-8是一...

    解决ajax乱码和页面传值问题

    在Web开发中,Ajax(Asynchronous ...总结,解决Ajax乱码问题主要涉及数据编码、请求头设置和服务器端解码,而页面传值则需根据需求选择适当的方法。理解并熟练运用这些技巧,能显著提升Web应用的性能和用户体验。

    Ajax乱码小结

    #### 三、解决Ajax乱码的方法 1. **GET请求乱码解决方案**: - 客户端在发送GET请求前,可以使用`encodeURIComponent`函数对参数进行编码,确保参数的正确传输。 - 服务器端通过`request.getParameter()`获取到...

Global site tag (gtag.js) - Google Analytics