emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks

服务器现在同时输出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>

 

 

posted on 2008-01-18 22:07 emu 阅读(2722) 评论(2)  编辑  收藏

评论

# re: 试试把xml和javascript写到同一个文件里面 2008-01-19 13:38 any
XML不符合W3C的标准  回复  更多评论
  

# re: 试试把xml和javascript写到同一个文件里面 2008-02-01 12:44 good
不错!!!  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: