服務器現在同時輸出json和xml兩種數據,取決于服務程序和頁面之間的約定。在程序遇到問題的時候會返回錯誤信息,也按照相同的約定會返回json或者xml格式的數據。比如當頁面請求xml的時候服務會返回:
而當頁面請求的是json的時候服務器會返回

但是今天遇到的問題是,服務器本身出了問題,比如說遇到內部服務器錯誤或者資源不存在,又不想返回對解決問題幫助不大的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


注意,從xml的角度上來看,這個xml沒有帶<?xml部分,因此不能制定encoding編碼,只能用默認的utf-8編碼輸出?;蛘哂脤嶓w替換和轉義符來回避編碼問題:
error.xml
alert("\u51fa\u9519\u4e86")//-->
之所以刻意不帶<?xml,是因為按照規范<?xml必需出現在最開始部分,雖然IE可以允許<?xml前面出現<!-- -->注釋,但是FF就沒有這樣的靈活性了。
簡單的在IE下面用兩種語法處理這個文件的一個例子:
<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>