asp輸出xml格式文件時的一個詭異錯誤及解決方法:XML declaration allowed only at the start of the document

今天要做asp根據輸入參數來判斷輸出文本的格式,做到輸出xml時發生了一個很詭異的錯誤,但是輸出的數據又是正確的,看着不爽,相關資料也查不到,自己想辦法解決了。

先來看看這個很詭異的錯誤:


代碼片段如下:

<%@ CODEPAGE=936 %>
<% Option Explicit %>
<% Response.Charset="gb2312" %>
<!--#include file="getdata.asp"-->
<%
	loadtype=Request("t")
	select case loadtype
		case ""
		
		case "json"
		
		case "xml"			
			%>
			<% response.contentType="text/xml" %>
			<?xml version='1.0' encoding='gb2312'?>
			<a>
			   <b>
				  <c><%= site(1,1)%></c>
				  <d><%=Plutname(2)%></d>
				  <e><%=Plut(2,1)%></e>
			   </b>
			</a>
			<%
		case "m"
			if errmsg="" then
				
			else
				Response.write "<span>" & errmsg & "</span>"
			end if
			%>
			</body> 
			</html>
			<%		
		case "w"
			%>
			<!DOCTYPE html>
			<html>
			<head>			</head> 
			<BODY>此處略</body> 
			</html>
<%		
	end select
%>
以上錯誤出現在 
<?xml version='1.0' encoding='gb2312'?>
這裏。一開始以爲是
<% response.contentType="text/xml" %>
需要放在第一行,試了,無用,依舊報錯。後來將
<?xml version='1.0' encoding='gb2312'?>
放到第一行問題解決。但是這不符合我的要求。於是試了將
<?xml version='1.0' encoding='gb2312'?>
改爲用代碼輸出,居然就可以了。
可見,估計是輸出xml時檢測整個文本,因爲還有好多語句跟着前後,故報錯。而改爲直接輸出後,瀏覽器得到的就只是單一的xml文本數據再進行格式判斷,這樣就正常了。
		case "xml"			
			%>
			<% response.contentType="text/xml" %>
			<% Response.write "<?xml version='1.0' encoding='gb2312'?>" %>
			<a>
			   <b>
				  <c><%= site(1,1)%></c>
				  <d><%=Plutname(2)%></d>
				  <e><%=Plut(2,1)%></e>
			   </b>
			</a>
			<%

以上部分將原本的直接寫xml頭信息改爲輸出:
<% Response.write "<?xml version='1.0' encoding='gb2312'?>" %>
這樣就正常了。



附上asp的 response.contentType 備查:
‘-------以下內容摘錄自知道
ajax開發中在請求服務器端的響應時, 對於每一種返回類型 規範的做法是要在服務端指定response的contentType
常遇到下面的幾種情況:
1、 服務端需要返回一段普通文本給客戶端,Content-Type="text/plain"
2 、服務端需要返回一段HTML代碼給客戶端 ,Content-Type="text/html"
3 、服務端需要返回一段XML代碼給客戶端 ,Content-Type="text/xml"
4 、服務端需要返回一段javascript代碼給客戶端
5 、服務端需要返回一段json串給客戶端
我們主要討論返回javascript代碼和Json對象的情況。
javascript 的 contentType 按最標準的寫法 應該是 application/javascript。而常用的
text/javascript 已經被 rfc定義爲廢棄的。
但是 在這裏暫時不建議使用 application/javascript . 大家還是繼續使用 text/javascript
爲好. 因爲很多老舊瀏覽器並不支持 application/javascript .
而所有瀏覽器都支持text/javascript. 在標準和廣泛的兼容性之間 還是暫且選擇後者吧。
json 的 contentType 常見寫法有 : text/json &
text/javascript .
但是 這個 text/json 其實是根本不存在的, 而 text/javascript 在有些時候客戶端處理起來會有歧義.
對於json的contentType , rfc裏定義的標準寫法是 :application/json.
在這裏毫無疑問 我們應該選擇標準寫法的 application/Json。

’-------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章