<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-86  評論-767  文章-3  trackbacks-3

    這兩天在繼續我的Ajax之旅。一直在抓緊步伐。

    前天試驗使用Ajax提交form表單到服務器,獲取form信息內容出現了亂碼,一時無法解決。網上有結論說是application/x-www-form-urlencoded編碼的原因,我估計也是。正在尋找解決之道。

    大家一起討論討論。

    2005-12-05 11:20 補充:
    通過在后臺用UTF8轉碼的方式可以解決中文亂碼問題。這種方法針對form表單提交,編碼在服務器完成。代碼如下:
    form.jsp: 
    <%@ page contentType="text/html; charset=gb2312"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>表單提交測試</title>
    <script language="javascript">
     var http_request = false;
     function send_request(url,poststr) {//初始化、指定處理函數、發送請求的函數
      http_request = false;
      //開始初始化XMLHttpRequest對象
      if(window.XMLHttpRequest) { //Mozilla 瀏覽器
       http_request = new XMLHttpRequest();
       if (http_request.overrideMimeType) {//設置MiME類別
        http_request.overrideMimeType('text/xml');
       }
      }
      else if (window.ActiveXObject) { // IE瀏覽器
       try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
        try {
         http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
       }
      }
      if (!http_request) { // 異常,創建對象實例失敗
       window.alert("不能創建XMLHttpRequest對象實例.");
       return false;
      }
      http_request.onreadystatechange = processRequest;
      // 確定發送請求的方式和URL以及是否同步執行下段代碼
      http_request.open("POST", url, true);
      http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      http_request.send(poststr);
     }
     // 處理返回信息的函數
        function processRequest() {
            if (http_request.readyState == 4) { // 判斷對象狀態
                if (http_request.status == 200) { // 信息已經成功返回,開始處理信息
                    alert(http_request.responseText);
                } else { //頁面不正常
                    alert("您所請求的頁面有異常。");
                }
            }
        }
     function form_submit() {
      var f = document.form1;
      var username = f.username.value;
      var password = f.password.value;
      var poststr = "";
      if(username=="") {
       window.alert("用戶名不能為空。");
       f.username.focus();
       return false;
      }
      if(password=="") {
       window.alert("密碼不能為空。");
       f.password.focus();
       return false;
      }
      poststr = "username="+encodeURI(f.username.value)+"&password="+f.password.value;
      send_request('form_handle.jsp',poststr);
      return false;
     }
    </script>
    </head>

    <body>
    <form name="form1" method="post" action="" onsubmit="return form_submit()">
        <table width="300" border="0" cellspacing="4" cellpadding="0" style=" font-size:12pt;">
            <tr>
                <td width="74" height="25">用戶名:</td>
                <td width="220" height="25"><input name="username" type="text" id="username" size="20"></td>
            </tr>
            <tr>
                <td height="25">密碼:</td>
                <td height="25"><input name="password" type="password" id="password" size="20"></td>
            </tr>
            <tr align="center">
                <td height="25" colspan="2"><input type="submit" name="Submit" value="提交"></td>
            </tr>
        </table>
    </form>
    </body>
    </html>

    form_handle.jsp:
    <%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
    <%
    String username = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF8");
    String password = request.getParameter("password");
    System.out.println("用戶名:"+username);
    System.out.println("密碼:"+password);
    out.println(username+"|"+password);
    %>

    另外,有些網友反應生成包含中文內容的XML文檔返回到客戶端也會出現亂碼問題。建議將XML文檔的編碼方式改成UTF8試試看。

    期待大家的反饋。

    posted on 2005-12-05 10:50 eamoi 閱讀(19649) 評論(28)  編輯  收藏 所屬分類: AJAX

    評論:
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-06 17:53 | emu
    老問題了,最簡單的方法是,全部escape后發送。取回后unescape,絕對沒有編碼問題。如果需要在服務器端escape/unescape可以看看
    http://www.tkk7.com/emu/articles/4773.html
    這個帖子的初衷就是為了解決xml的問題的。上次google東亞大賽還考了一道類似的題目,我直接從這上面copy的代碼交上去的呵呵。如果用其他后臺語言就要自己寫了。

    如果后臺用GBK編碼而前臺用UTF-8的話,可以在直接后臺轉碼,如果要在前臺轉碼就要用到vbscript了:
    <SCRIPT LANGUAGE="vbScript">
    <!--
    Function URLEncoding(vstrIn)
    strReturn = ""
    For i = 1 To Len(vstrIn)
    ThisChr = Mid(vStrIn,i,1)
    If Abs(Asc(ThisChr)) < &HFF Then
    strReturn = strReturn & ThisChr
    Else
    innerCode = Asc(ThisChr)
    If innerCode < 0 Then
    innerCode = innerCode + &H10000
    End If
    Hight8 = (innerCode And &HFF00)\ &HFF
    Low8 = innerCode And &HFF
    strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
    End If
    Next
    URLEncoding = strReturn
    End Function
    //-->
    </SCRIPT>

    這樣編碼后發送出去,后臺就可以按gbk編碼來接收了。


      回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-13 20:20 | 郭興華
    你好:我來咨詢你個問題:
    我想作個學生信息管理系統吧!!
    在網頁上,姓名錄入時,我想出現"google suggest"的效果,即錄入"張",馬上下面可以出現一個"層",將其姓所有姓"張"的顯示出.
    這其中的主要功能我已實現.主要用了以下幾方面知識:
    1 ajax不提交網頁,可以更新數據.使用httprequest.open("GET","***.xml",true)
    2 通過返回xml文檔,然后使用getElementsByTagName解析xml文檔.

    但是我現在的問題是,我的服務器端所有學生信息都存放在*.mdb中(并且我打算使用mdb,因為我覺的我比較順手),我想根據客戶端姓名文本框中錄入的姓,向服務器端發送請求.可以實現:
    1 使用post發送請求,.open("POST",****?姓,true)
    2 服務器可以根據"姓",從服務器的mdb數據庫中查出所有姓"張"的來
    3 將所有"姓張"的姓名生成形如<name>張三</name>....的xml文檔


    請問:
    1 服務器端怎么樣可以生成xmldoc文檔,然后transform(xmldoc)傳給客戶端. 客戶端可以使用httpresponse.responseXML返回數據,再利用getElementByTagName來解析.
    2 你能告訴我服務器端程序代如何寫嗎??
    3 你能告訴我服務器端使用的什么技術嗎??還需要java2.0? tomcat?servlet??
    3 我的機器是winxp IIS ,我的機器還需要安裝什么呢???

    期待老師的指教!?。。?




      回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-14 09:28 | eamoi
    回答如下:
    1、服務器端返回XML:
    使用post發送請求,.open("POST",****?姓,true) 是可行的辦法。open的URL地址可以是各種各樣的后臺程序,比如ASP、JSP等。URL地址格式為**.asp?姓=..。只是在open所指向的后臺程序文件中,要輸出xml文檔。比如,ASP中,采用Response.write方式打印出一個XML文檔;JSP中采用out.pringln的方式打印出一個XML文檔。AJAX會自動返回。返回到客戶端,用JS操縱DOM更新頁面內容就可以了。這個過程跟數據庫類型無關,無非是一個取出數據的過程而已。

    2、服務器端代碼如何寫:
    根據你所使用的技術,到GOOGLE搜索一下,關鍵詞“** 生成XML文檔”。比如:“JSP 生成XML文檔”。應該可以查找到生成XML文檔的方法。這點我不贅述了。

    3、服務器端需要什么技術:
    Ajax只是一個改善視圖層和提高數據交互效率的方法而已,理論上適用幾乎全部的后臺程序,至少目前已經支持JSP/ASP/.NET/CGI等,我想編程對你應該不是問題。

    4、具備IIS的機器還需要安裝什么:
    適用IIS服務器,后臺程序應該是采用ASP或者.NET技術吧。Ajax是一個無需插件的技術,它只是將目前幾種技術Javascript、XML和XSTL、DOM、XMLHttpRequest綜合起來使用,這些技術都得到了主流Web服務器和瀏覽器的支持,毋庸擔心。所以結論是:不用再安裝其他的軟件或者插件了。

    最后,祝順利。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-14 09:32 | eamoi
    我想出現"google suggest"的效果,即錄入"張",馬上下面可以出現一個"層",將其姓所有姓"張"的顯示出.
    ~~~~~~~~~~~~~這個應該就是數據自動匹配功能。實現起來難度應該不大。在幾個主流的Ajax框建中已經都可以看到這個支持了,比如Ajax JSP Tag Library。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-14 11:52 | 郭興華
    你好:

    你寫的最上面那個例子.我原樣復制下來form.jsp form_handle.jsp復制下來的.怎么調試出現"您所請求的頁面有異常"
    我的機器是winxp iis 其他沒裝.(tomcat java2sdk也沒裝)??是什么原因??  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-14 12:16 | 郭興華
    你能到:www.javascript.com.cn論壇下的"Ajax(javascript、XMLHttpRequest、DOM......) "論壇下看一看主題為"Ajax2"的那個貼字,給回答一下嗎??
    那里面還有你的書呢!!  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-15 21:57 | llinzzi
    回答郭興華朋友
    jsp是需要服務端運行環境的,請安裝tomcat.  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-17 13:13 | 郭興華
    關干利用dom操作xml的問題:
    我在JBuild4.0,(tomcat5.0)已將C:\Tomcat 5.0\common\endorsed\xml-apis.jar導入,然后編寫document1.java

    package com.deitel.advjhtp1.servlets;
    import javax.xml.parsers.*;
    import javax.xml.transform.*;

    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.DocumentBuilder;

    import javax.xml.transform.dom.*;
    import javax.xml.parsers.*;


    public class document1 {

    public document1() {
    Document doc;
    Document doc1=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
    DOMSource doms=new DOMSoruce(doc);
    }
    }


    編譯時出現如下錯誤:

    [Document doc;這句話出現的錯誤:]

    "document1.java": Error #: 300 : class Document not found in class com.deitel.advjhtp1.servlets.document1 at line 15, column 3

    [這句話: Document doc1=DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();出現的以下兩個錯誤]

    "document1.java": Error #: 300 : class Document not found in class com.deitel.advjhtp1.servlets.document1 at line 16, column 3
    "document1.java": Error #: 360 : unreported exception: javax.xml.parsers.ParserConfigurationException; must be caught or declared to be thrown at line 16, column 72

    [ DOMSource doms=new DOMSoruce(doc);這句話出現的以下錯誤:]

    "document1.java": Error #: 300 : class DOMSoruce not found in class com.deitel.advjhtp1.servlets.document1 at line 17, column 22


    請高手指教!!!  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-17 14:12 | 郭興華
    import javax.xml.transform.dom.DOMSource;
    import javax.swing.text.Document;
    加上上面兩句話,就是document doc;不出錯,其他完全相同.  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-18 13:25 | 郭興華
    package com.deitel.advjhtp1.servlets;
    import org.w3c.dom.*;
    import javax.xml.parsers.*;
    import org.xml.sax.*;

    public class WelcomeServlet2 {

    public WelcomeServlet2() {
    }
    public static void main(String[] args) {

    Document doc;
    Element root;
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    factory.setValidating(true);
    try{
    DocumentBuilder builder=factory.newDocumentBuilder();
    doc=builder.newDocument();
    }catch(ParserConfigurationException pce)
    {
    pce.printStackTrace();
    }

    root=doc.createElement("result");

    }
    }

    還是提示: root=doc.createElement("result");這句話錯誤
    "WelcomeServlet2.java": Error #: 553 : variable doc might not have been initialized at line 24, column 10
    原帖來自于網易社區:http://p5.club.163.com/viewArticleByWWW.m?boardId=java&articleId=java_107a8e37bc7341e   回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2005-12-25 08:29 | 郭興華
    利用jdbc.odbc訪問Access數據庫.mdb,怎么寫到Class.for()時,
    打上class.時,后面提示中沒有顯示for呢,請高手指教??!


    用的是Jbuilder4.0,
    我的系統是jbuilder4.0 我已加上了
    import java.sql.*;
    import java.lang.class.*;

    我懷疑是不是我的什么.jar沒有config jdk??
    請高手指教!!   回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-01-11 18:09 |
    在asp中解決亂碼問題只需要在服務器端加上<%Response.ContentType = "text/html;charset=GB2312"%>就可以了,十分簡單!  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-01-17 11:17 | suyejun
    我前臺頁面用的是GBK,為什么后臺反而要用new String(req.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")進行轉碼呢?我對編碼不太清楚,能不能給點指教,謝謝~
    ps:你的教程我很喜歡  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-01-23 05:48 |
    解決AJAX的亂碼,可以用 escape()函數的呀。

    var url="aaa.aspx?value=" + escape(val) ;
    //我在.Net下沒有發現什么問題,插入數據庫里的值沒有中文亂嗎問題  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-02-07 12:29 | haiter
    我也遇到"取數據的亂碼問題"
    不知怎樣解決?  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-02-15 21:41 | sea135
    我在ajax的responseText接收的是亂碼

    form_handle.jsp 中
    out.println(username+"|"+password);輸出的是UTF-8的字符串
    但是:
    out.println("密碼錯誤")
    這樣在responseText接收的不會是亂碼?

      回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-02-15 21:50 | sea135
    我的情況還有些不同
    我之前調用了request.setRequestEncode("GBK");
    之后我在action中
    out.print("成功");
    這時在responseText接收的是亂碼!
    我試圖轉換"成功"這個字符串的編碼但是沒用

    希望各位能幫忙解答,不勝感激  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-02-27 10:45 | javadolt
    我escape后傳過去的參數為NULL,不進行escape傳過去的英文正常,中午亂碼。我是用 http_request.send(data);傳送數據過去的。
    如果直接在url后面加?test=中文,這個沒問題,把ISO-8859-1轉為GBK就可以了。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-04-08 00:39 | errorfun
    用過濾器不行嗎??  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-04-26 09:56 | HH
    JavaScript:
    assertEquals("%E7%9A%84", encodeURI("的"));

    Java:
    assertEquals("\u7684", "的");
    assertEquals("的", URLDecoder.decode("%B5%C4", "GB2312"));
    assertEquals("的", URLDecoder.decode("%E7%9A%84", "UTF-8"));

    參考:Java中文亂碼問題大全
      回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-05-18 06:56 | java中
    hh是什么意思說得詳細些好嗎?  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-06-25 08:28 | betty
    @郭興華
    應該加上import org.w3c.dom.*;
    好像是。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-06-29 15:31 | luchunwei
    謝謝,這個方法不錯。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-09-05 10:26 | fdsfds
    謝謝,
    String ss=new String(request.getParameter("value").getBytes("ISO-8859-1"),"UTF8");
    System.err.println(ss);
    我正頭大找這個解決問題呢。太謝謝了
    但在servlet中好像:request.setCharacterEncoding("UTF8");
    String ss=request.getParameter("value");
    System.err.println("post pd : "+ss);
    就行了。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2006-09-06 15:32 | 烏鴉在黑夜里飛
    實際上所有的問題都來自編碼的不統一:
    1、HTTP/POST方式在缺省情況下,采用的是“x-www-form-urlencoded”進行編碼,它和JavaScript里面的encodeURI所起的作用是一樣的;
    2、經過這樣編碼的內容,到達后臺時,其中的字符都是UTF-8編碼格式的;
    3、如果你的Servlet/JSP指定輸出使用的Content-Type是UTF-8,恭喜你,你不需要對這些Parameters進行特別的編碼、解碼操作,它一定是正常的;
    4、否則你需要對這些parameter進行解、編碼操作,例如你的頁面是GBK編碼,那么你需要這么寫:
    String sPara = new String(request.getParamter("test").getBytes("iso-8859-1"),"GBK");
    采用gb2312編碼的也可以采用GBK編碼;
    5、如果你是在eclipse中進行工作,請注意你的Servlet和JSP文件的屬性,其中的編碼必須和content-type中設置的一樣,否則javac會對你的文件進行錯誤的編碼,這時候的字節碼文件本身的字符串就是錯誤的,輸出也不頂用;
    6、最后做一個總結:
    6.1、servlet/JSP文件本身的編碼必須和content-type輸出的一致,否則需要加入額外的編碼、解碼步驟;
    6.2、HTTP/POST方式和encodeURI方式傳入的編碼都是UTF-8的;
    6.3、普通的window.open(...),也就是HTTP/GET方式,其傳入的編碼是和運行script的頁面編碼一致的;
    6.4、后臺解碼必須通過iso-8859-1進行解碼,再使用你的目標編碼進行編碼;
    6.5、所有的問題基本上可以得到解決。  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2007-05-31 14:40 | itblog
    我想問一下eamoi老師,這個問題最后的解決辦法,因為我現在遇到了同樣的問題!謝謝!  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2007-06-11 10:57 | purple.calm
    do jsp have convert methods? just like in php mb_convert_encoding()  回復  更多評論
      
    # re: Ajax開發過程中提交獲取數據的亂碼問題 2007-06-12 15:22 | 風的語言
    我用ajax取到的文本框值提交到后臺后,文本框中的格式全沒了,只提交了純數據過去,也就是說回車換行這些都沒有了,有遇到過相同問題的嗎,請問怎么解決  回復  更多評論
      
    主站蜘蛛池模板: 久久美女网站免费| 成人a毛片视频免费看| 四虎影视在线影院在线观看免费视频| 免费大黄网站在线观| 大桥未久亚洲无av码在线| 午夜精品在线免费观看| 亚洲国产成人无码AV在线| 小小影视日本动漫观看免费| 日韩亚洲人成在线综合| 国产视频精品免费| 青青草国产免费国产是公开 | 国产日韩在线视频免费播放| 综合亚洲伊人午夜网| 99麻豆久久久国产精品免费| 国产V亚洲V天堂无码久久久| 最新亚洲成av人免费看| 亚洲狠狠综合久久| 99久久99这里只有免费费精品| 亚洲成_人网站图片| 国产成人涩涩涩视频在线观看免费 | 91免费精品国自产拍在线不卡| 67194在线午夜亚洲| 国内大片在线免费看| 色老头综合免费视频| 亚洲爆乳精品无码一区二区三区| 久久久久免费看黄a级试看| 亚洲成a人片在线观| 日本无吗免费一二区| 丁香花在线观看免费观看图片| 亚洲精品福利视频| 永久免费毛片手机版在线看| eeuss影院www天堂免费| 亚洲韩国在线一卡二卡| 日本免费电影一区| 免费成人在线视频观看| 中文字幕在线观看亚洲日韩| 亚洲精品视频免费| 97在线视频免费| 成人免费网站视频www| 亚洲神级电影国语版| 一级毛片直播亚洲|