最近估计是和utf-8干上了,今天又搞定一个ajax的编码问题

今天开始试用ajax最为项目的辅助,本来开始很顺利,测试的内容也比较简单
先在一个jsp中加入ajax的引擎
// ajax 引擎
    <script language="javascript">
None.gif    var http_request 
=   false ;
None.gif    var currentPos 
=   null ;
ExpandedBlockStart.gifContractedBlock.gif    function send_request(url) 
dot.gif {//初始化、指定处理函数、发送请求的函数
InBlock.gif
        http_request = false;
InBlock.gif        
//开始初始化XMLHttpRequest对象
ExpandedSubBlockStart.gifContractedSubBlock.gif
        if(window.XMLHttpRequest) dot.gif//Mozilla 浏览器
InBlock.gif
            http_request = new XMLHttpRequest();
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if (http_request.overrideMimeType) dot.gif{//设置MiME类别
InBlock.gif
                http_request.overrideMimeType('text/xml');
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
else if (window.ActiveXObject) dot.gif// IE浏览器
ExpandedSubBlockStart.gifContractedSubBlock.gif
            try dot.gif{
InBlock.gif                http_request 
= new ActiveXObject("Msxml2.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif            }
 catch (e) dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif                
try dot.gif{
InBlock.gif                    http_request 
= new ActiveXObject("Microsoft.XMLHTTP");
ExpandedSubBlockStart.gifContractedSubBlock.gif                }
 catch (e) dot.gif{}
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (!http_request) dot.gif// 异常,创建对象实例失败
InBlock.gif
            window.alert("不能创建XMLHttpRequest对象实例.");
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
InBlock.gif        http_request.onreadystatechange 
= processRequest;
InBlock.gif        
// 确定发送请求的方式和URL以及是否同步执行下段代码
InBlock.gif
        
InBlock.gif        http_request.open(
"POST", url, true);
InBlock.gif        http_request.setRequestHeader(
"Content-Type","application/x-www-form-urlencoded");
InBlock.gif            
InBlock.gif        http_request.send(
null);
ExpandedBlockEnd.gif    }

None.gif    
//  处理返回信息的函数
ExpandedBlockStart.gifContractedBlock.gif
    function processRequest()  dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (http_request.readyState == 4dot.gif// 判断对象状态
InBlock.gif
             
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if (http_request.status == 200dot.gif// 信息已经成功返回,开始处理信息
InBlock.gif
                
InBlock.gif                InBlock.gif                
InBlock.gif                document.getElementById(currentPos).innerHTML 
= http_request.responseText;
ExpandedSubBlockStart.gifContractedSubBlock.gif            }
 else dot.gif//页面不正常
InBlock.gif
                alert("http_request.status exception code:"+http_request.status);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }
</script>

然后在jsp中做个测试的select,和用于显示ajax的回传数据的区域
< table width = " 200 "  border = " 0 "  cellspacing = " 0 "  cellpadding = " 0 " >
    
< tr >
        
< td height = " 20 " >< select name = " ajaxtest "  size = " 1 "  onchange = " showRoles('test1'); " >
        
< option selected = " selected "  value = " test1 "   > test1 option>
        
<option value="test2" >test2option>
        
<option value="test3" >test3option>
        
<option value="test4" >test4option>
        
select>td>
    
tr>
    
<tr style="display:none">
        
<td height="20" id="test1">&nbsp;td>
    
tr>
 
再写一个js用了作为事件的触发
< script language = " javascript " >
        
    
// 显示部门下的岗位
    function showRoles(obj)  {
        document.getElementById(obj).parentNode.style.display 
= "";
        document.getElementById(obj).innerHTML 
= "loading"
        currentPos 
= obj;
        
        send_request(
"http://localhost/oa-web/app/test/sample2_2.jsp?playPos="+obj);
    }
 再另外写一个资源jsp,用于读取资源回来


< meta http - equiv = " Content-Type "  content = " text/html; charset=UTF-8 " >
两个jsp的编码都是utf-8的,但是在测试时发现回传回来的responseText都是乱码
去google上找,原来http_request 这个对象在request和response都是以gb2312进行的,需要更改编码
但是可恶的是javascript没有提供更改http_request 编码的方法于是在网上找了一个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> 
然后对回传回来的http_request 进行一下编码更改
     //  处理返回信息的函数
    function processRequest()  {
        
if (http_request.readyState == 4// 判断对象状态
             
            
if (http_request.status == 200// 信息已经成功返回,开始处理信息
                
                URLEncoding(http_request.responseBody);
                
                document.getElementById(currentPos).innerHTML 
= http_request.responseText;
            }
 else //页面不正常
                alert("http_request.status exception code:"+http_request.status);
            }

        }

    }
最终终于可以正常显示中文了
这两天和编码的纠缠有一个深刻的体会:做中国人难啊,要是计算机是中国人发明的多好:)
注:这种方法只在IE上试验过,别的浏览器还没有试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当使用 AJAX 发送数据时,我们通常需要确保数据的编码格式为 UTF-8,以避免中文等非 ASCII 字符出现乱码的情况。以下是使用 AJAX 发送 UTF-8 编码的示例: ``` var xhr = new XMLHttpRequest(); xhr.open('POST', '/api/submit', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; var data = 'name=' + encodeURIComponent('张三') + '&age=18'; xhr.send(data); ``` 在上面的示例中,我们先通过 `xhr.setRequestHeader()` 方法设置请求头中 `Content-Type` 属性为 `application/x-www-form-urlencoded; charset=UTF-8`,以指发送的数据编码格式为 UTF-8。 然后,我们使用 `encodeURIComponent()` 方法对数据进行编码,以确保非 ASCII 字符正确传输。最后,使用 `xhr.send()` 方法发送数据。 在服务端接收到数据后,也需要确保数据的编码格式为 UTF-8,以正确解析含有非 ASCII 字符的数据。 ### 回答2: Ajax(Asynchronous Javascript and XML)是一种在网页中使用的异步的Web开发技术,它通过JavaScript和XML(现在也可以是JSON等数据格式)实现数据的异步加载和交互,从而提升用户体验。 UTF-8(Unicode Transformation Format 8-bit)是一种能够对全世界所有字符进行编码的一种字符编码,它可以用来表示Unicode字符集中的所有字符。UTF-8是一种变长的编码方式,它通过使用1到4个字节来表示不同的字符,这样可以减少存储和传输的空间。 在Ajax中使用UTF-8编码有以下几个方面的作用和好处: 1. 多语言支持:UTF-8编码可以支持全球范围内的多种语言,包括中文、英文、法文、德文等等。使用UTF-8编码可以确保在Ajax请求中传输的数据能够正确地表示和处理各种语言的字符。 2. 数据的正确性:UTF-8编码可以将特殊字符和非ASCII字符正确地表示和传输,这对于包含特殊字符或表情符号等的数据处理非常重要。使用UTF-8编码可以避免因特殊字符导致的数据传输错误或乱码问题。 3. 网络传输效率:由于UTF-8是一种变长编码方式,相对于固长度的编码方式(如UTF-16)来说,它可以节省传输数据的空间。这对于Ajax请求来说尤为重要,因为Ajax请求需要通过网络传输数据,使用UTF-8编码可以减少数据传输量,提升网络传输效率。 总之,AjaxUTF-8是互相独立的技术,但它们可以结合使用,提升Web应用的用户体验和数据处理能力。通过在Ajax请求中使用UTF-8编码,我们可以确保正确地处理各种语言的字符,避免数据传输错误和乱码问题,同时提高网络传输效率。 ### 回答3: Ajax是一种网页开发技术,用于实现异步的数据交互。而UTF-8是一种字符编码标准,用于表示各种语言的字符。在Ajax中,可以使用UTF-8编码来处理数据的传输和显示。 首先,Ajax可以通过XMLHttpRequest对象发送请求并接收响应数据。当发送请求时,可以通过设置XMLHttpRequest对象的属性来指使用UTF-8编码。例如,可以使用`xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");`来设置请求头中的字符编码。 在接收响应数据时,可以通过XMLHttpRequest对象的属性来获取服务器返回的数据。如果服务器使用UTF-8编码返回数据,可以直接使用`xhr.responseText`来获取响应内容。 在将数据显示到网页上时,也需要确保网页使用UTF-8编码。可以通过在网页的头部添加`<meta charset="UTF-8">`来指网页的字符编码。 使用AjaxUTF-8编码可以更好地处理各种语言的字符。UTF-8编码可以表示世界上所有的字符,包括汉字、日语、韩语等各种字符。而Ajax可以通过异步请求将数据与服务器进行交互,实现更加流畅和高效的用户体验。通过使用AjaxUTF-8编码,可以轻松地处理多语言环境下的数据交互和显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值