首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

javascript 动态创建 <script> 节点所想到的其它有关问题

2012-10-31 
javascript 动态创建 script 节点所想到的其它问题最近公司的项目中,有一个模块需要调用集团提供的数据

javascript 动态创建 <script> 节点所想到的其它问题
        最近公司的项目中,有一个模块需要调用集团提供的数据文件(本质上是一 js 文件,存储的是 json 对象)。公司项目的域名和集团的域名不一样,ajax 为了安全考虑,不允许异域调用(某些 js 框架实现了异域调用,如 dojo,这里我不打算使用 dojo 的 ajax),因此我们可以通过在页面动态创建 script 节点:


        上述代码在 callback 函数中可以处理异域返回的 js,但这里又出现了一个问题。公司项目统一采用的是 UTF-8 编码,而集团采用的却是 GBK 编码,因此通过上述代码,我们在异域上拿到的 response 的编码和页面编码不一致,这就导致了乱码的出现。而 javascript 本身不能处理各种字符编码间的转换。可我们知道,java 是可以处理字符编码间的转换的,基于这点,我们大概知道了思路。

        PS:  之后,我和集团的同事沟通了下,其实解决这个很简单,为 script 指定编码即可。即在上述代码的第 20 行 添加:script.charset = "GBK";。但下面阐述的方法也是一种解决方案,能用那一句话解决问题的,其实也就没有必要用下面的方法了。

        我们在页面发送 ajax 请求,发送的参数就是异域资源的 url。公司项目的服务器在接到这个 ajax 请求后,再通过 http 调用(ajax 传来的异域资源的 url),拿到异域返回的页面字符串(这里异域返回的是 js 片段,java 程序仍然认为是字符串),这里,java 程序可以自由地进行字符编码的转换。最后,将处理好编码的字符串发送至客户端(这里由于知道是 js,而且是 json 对象,我们可以在 java 代码中使用 renderJSON 直接向客户端输出 json)即可:
 

热点排行
Bad Request.