试试把xml和javascript写到同一个文件里面

作者:emu 来源:emu博客 时间:2009-10-02 16:53:00 

服务器现在同时输出json和xml两种数据,取决于服务程序和页面之间的约定。在程序遇到问题的时候会返回错误信息,也按照相同的约定会返回json或者xml格式的数据。比如当页面请求xml的时候服务会返回:

<?xml version="1.0" encoding="gb2312"?><error>出错了</error>

 而当页面请求的是json的时候服务器会返回

alert("出错了")

但是今天遇到的问题是,服务器本身出了问题,比如说遇到内部服务器错误或者资源不存在,又不想返回对解决问题帮助不大的500或者404响应,而想像上面一样返回一个一致性的带错误说明的200响应。由于无从得知现在应该返回xml还是json格式的出错信息。于是服务器就统一返回了一个xml格式的错误。但是页面这个时候是用script标签在请求一个json数据,接收到一个xml文件,直接就产生语法错误了。改成json的话,请求xml的地方也无法提供正确的错误提示。

这个时候我们需要的就是服务器返回一个同时符合javascript和xml语法的错误信息,或者说把xml和javascript的错误信息放到一起。

嗷嗷研究过把css和javascript放在一个文件里面,主要是为了可以较少一个http请求。把xml和javascript放在一起有一些不同。

最容易想到的是“<!-- ”注释符。由于历史原因,这个xml里面的注释符在javascrip里面是一个单行注释符,也就是说在javascript里面,它以回车符为结束,而在xml里面是以-->结束。因此如果用这样一个符号开始一个文件,我们就可以通过控制它的结束位置来控制它在不同语法下面的意义。

error.xml

<!-- --><error>出错了</error><!-- 
alert("出错了")//-->

 注意,从xml的角度上来看,这个xml没有带<?xml部分,因此不能制定encoding编码,只能用默认的utf-8编码输出。或者用实体替换和转义符来回避编码问题:

error.xml

<!-- --><error>&amp;#x51fa;&amp;#x9519;&amp;#x4e86;</error><!-- 
alert("\u51fa\u9519\u4e86")//-->

 之所以刻意不带<?xml,是因为按照规范<?xml必需出现在最开始部分,虽然IE可以允许<?xml前面出现<!-- -->注释,但是FF就没有这样的灵活性了。

简单的在IE下面用两种语法处理这个文件的一个例子:

<HTML>
<HEAD>
<TITLE> test </TITLE>
<META NAME="Author" CONTENT="emu">
</HEAD>
<BODY>
<xml src="error.xml" id="err"></xml>
<SCRIPT LANGUAGE="JavaScript" src="error.xml" charset="utf-8"></SCRIPT>
<SCRIPT LANGUAGE="JavaScript">
alert(err.getElementsByTagName("error")[0].xml)
</SCRIPT>
</BODY>
</HTML>

标签:xml,javascript,服务器
0
投稿

猜你喜欢

  • DHTML+XML+ASP+CSS的树形目录

    2008-10-24 14:29:00
  • 细化解析:MySQL 服务器究竟有多稳定?

    2009-01-14 11:55:00
  • Oracle数据库与SQL Server数据库镜像对比

    2009-04-11 16:24:00
  • ASP写的不错的"数字分页"涵数

    2008-10-19 17:21:00
  • fso文件按照文件名字母排序

    2008-03-09 15:25:00
  • IE中选择符的4095限制

    2009-10-09 13:25:00
  • Yahoo!网站性能最佳体验的34条黄金守则——图片、Coockie与移动应用

    2008-05-29 13:44:00
  • AXObject解决IE需要激活 ActiveX 控件方法

    2007-11-08 12:16:00
  • position两三事

    2009-02-16 15:23:00
  • INPUT的对齐问题

    2008-05-24 08:32:00
  • PHP工厂模式Factory Pattern的实现及特点

    2023-05-25 05:19:24
  • 和“登录”有关的事儿

    2009-07-10 17:37:00
  • 带你轻松接触 MySQL中损坏的MyISAM表

    2008-12-19 17:55:00
  • 动态导航设计

    2008-09-21 13:40:00
  • 阿里巴巴工程师分享MySQL经验

    2010-04-22 16:21:00
  • Dreamweaver基础技巧全面接触

    2010-03-25 12:23:00
  • 蚁群算法js版

    2008-10-08 10:15:00
  • 前后端分离开发模式初体验

    2009-06-24 11:44:00
  • 对用户研究实践的思考

    2010-10-19 12:21:00
  • 交互设计规范原则

    2011-09-30 11:52:12
  • asp之家 网络编程 m.aspxhome.com