`
cuijiemin
  • 浏览: 265120 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ExtJs的Ajax乱码问题

阅读更多

最近用ExtJS+Ashx开了一个小的开源项目JeebookStore.


之前一直用的英文做的测试都也没感觉有啥问题,上周末一上中文,乱码问题就骚扰了我一个周末。


最开始是FormPanel发送的数据到ashx的时候出现乱码,Google了一下这样的问题还挺多,把所有js和html转存为UTF-8,然后把调用js的html设置为UTF-8编码,当然Asp的Request和Response保持默认的UTF-8,Firefox上就没有乱码的问题了。


再试IE,发现FormPanel内的数据已经没有问题,但通过URL参数传递的中文还是不对。依次尝试使用escape,encodeURI,encodeURIComponent函数对URL进行编码,没有效果。


多次试验下发现如果使用Form.submit函数的params属性来传递参数,并且method为GET时,IE下的表现就是正常的。如:

URL: ashx/AddFile.ashx?name=中国&path=/中国

Form.submit({

url : ‘ashx/AddFile.ashx’,

method : ‘GET’,

params : {

name : ‘中国',

path : ‘/中国';

}

})

检查Action.Submit类的代码,发现ExtJS会在submit时使用params来拼接成如上的URL,之所以没有出现乱码,是因为分别对每个值进行了编码,而编码用的函数正是encodeURIComponent,只不过不像我之前那样直接对整个URL调用而已。


这番折腾又应了那句话,不合常理的问题往往是函数调用的问题。


总算IE和Firefox都可以正确处理中文了,可事情还没完,下载文件的文件名在FireFox变乱码了,当然还不算太乱,只不过是%E7%E9之类的显示而已。


检查发现我在返回文件名时,使用Server.UrlEncode对文件名做了UTF-8的编码,如果直接返回文件名则FireFox正常了,但IE同时变乱码,这次是彻底的乱码。貌似是因为FireFox对文件名的解析采用了ISOxxxx-1的编码而不是Http头中记录的编码类型。Google+研究了半天貌似没有好的解决办法,只好在ashx中做了浏览器的分支,即:

HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser;
if ( bc.Browser == "IE" )
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
else
_Response.AddHeader("Content-Disposition", "attachment;filename=" + _fileName);

代码很简单,但还是发生了点小插曲。因为采用ashx,context.Request中没有Browser的属性,必须采用HttpContext.Current.Request.Browser才能正常调用。


总算最终尘埃落定,虽然还有FireFox下载文件名中包含;文件名会被截断之类的问题,不过留在下次再说吧

分享到:
评论

相关推荐

    Extjs Ajax 乱码问题解决方案

    Extjs Ajax乱码问题的出现通常与字符编码的不一致有关,无论是在客户端提交到服务器的数据还是服务器返回给客户端的数据中都可能出现乱码。解决此问题通常需要对编码过程和开发环境进行细致的调整。 首先,了解乱码...

    extjs 前后台交互参数出现中文乱码问题的解决方法

    ### extjs前后台交互参数出现中文乱码问题的解决方法 #### 问题背景与原因分析 在使用MyEclipse开发工具进行Web应用开发时,尤其是采用ExtJS框架结合Ajax技术进行前后端数据交互的过程中,可能会遇到一个常见的...

    ExtJS4中文教程2 开发笔记 chm

    JQuery AJAX提交中文乱码的解决方案 Jquery css函数用法 JQuery中getJSON的使用方法 Jquery中显示隐藏的实现代码分析 JQuery全选功能的实现 JQuery特效——下拉菜单 JQuery系列教程之XPath选择符 JQuery系列教程之...

    ExtJs增删改查实例,献给初学者(佳家记账)

    如果在浏览器中打开页面时遇到乱码问题,这可能是因为字符编码设置不正确。解决方法是将浏览器的编码设置为UTF-8,这是一种广泛支持的Unicode编码,能确保正确显示多语言字符。 这个实例可能包含以下关键知识点: ...

    extjs和struts的技术结合

    11. **Ext JS中文乱码解决方案**:在开发过程中,可能会遇到中文乱码问题,这通常与编码设置有关,需要确保项目编码、服务器编码、浏览器编码一致。 12. **Eclipse中JS中文乱码**:Eclipse作为IDE,其JavaScript...

    ajax的responseText乱码的问题的解决方法

    总之,Ajax的responseText乱码问题通常与服务器的响应编码设置、浏览器的自动解码以及客户端的处理方式有关。确保服务器正确设置Content-Type和字符编码,客户端正确处理接收到的数据,是避免乱码问题的关键。如果...

    Extjs_前后台数据交互[归类].pdf

    这里需要注意的是,后台需要设置正确的字符编码,以防止中文乱码问题,并且设置响应类型为JSON,以便前端解析。 在ExtJS与ASP.NET或其他后台框架交互时,基本思路是一致的,只是后台处理请求的方式会根据所使用的...

    Struts2+Spring+Hibernate+ExtJS开发实例.pdf

    - 配置字符编码过滤器`CharacterEncodingFilter`以解决中文乱码问题。 3. **框架间集成**: - 利用Spring的依赖注入特性,将Hibernate的SessionFactory注入到业务逻辑层(Service层),以便于进行数据访问操作。 ...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能.doc

    - **字符编码配置:** 为了避免乱码问题,引入`CharacterEncodingFilter`过滤器,设置请求和响应的编码为UTF-8。 **2. 全局配置文件:** - `web.xml`完整配置应包括上述所有配置项,同时可能还需要其他一些标准...

    ajax传递一个参数具体实现.docx

    对于中文参数的问题,有时可能会遇到编码问题,导致传递的中文字符乱码。这时,我们需要确保服务器和客户端的编码设置一致,并可能需要对数据进行编码。例如,使用`encodeURIComponent`函数对参数进行编码: ```...

    Ajax文档

    尽管原文中存在大量非标准字符和乱码,但仍然可以辨识出与Ajax框架相关的技术细节。 ### Ajax概念 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下能够更新部分网页的技术。它通过...

    DWR入门教材

    在服务器端,`request.setCharacterEncoding("UTF-8")`和`response.setCharacterEncoding("UTF-8")`用于设置字符编码为UTF-8,确保数据传输过程中不会出现乱码问题。通过`request.getParameter("node")`获取请求参数...

    C#+读取文本文件+字符编码

    在IT领域,文本文件的读取是常见的操作,特别是在编程语言如C#中。本文将深入探讨如何在C#环境中...在实际开发中,开发者需要根据项目需求选择合适的编码方式,并确保在整个数据处理链路中保持一致,以避免乱码问题。

    周老科研站1的一些资料

    8. **解决AJAX传送中文会导致乱码的问题**:AJAX(Asynchronous JavaScript and XML)是一种创建异步Web应用的技术。中文乱码是跨平台、跨浏览器通信时常见的问题,这个文档可能提供了有效解决这个问题的方法,对于...

    Ext 开发指南 学习资料

    碰到使用ajax获得数据,或者提交数据出现乱码 A.8. TabPanel使用autoLoad加载的页面中的js脚本没有执行 A.9. 有关grid的一些小问题 A.9.1. 如何让grid总所有的列都支持排序 A.9.2. 修改一个grid的ColumnModel和...

    EXT2.0中文教程

    碰到使用ajax获得数据,或者提交数据出现乱码 A.8. TabPanel使用autoLoad加载的页面中的js脚本没有执行 B. 修改日志 C. 后记 C.1. 2007年12月5日,迷茫阶段 C.1.1. 仇恨 C.1.2. 反省 C.2. 关于ext与dwr整合部分的...

Global site tag (gtag.js) - Google Analytics