试试把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
投稿

猜你喜欢

  • 解决vue动态下拉菜单 有数据未反应的问题

    2024-05-28 16:10:19
  • Echarts基本入门之柱状图、折线图通用配置

    2024-04-28 09:37:10
  • python with提前退出遇到的坑与解决方案

    2023-12-24 15:02:35
  • 学习javascript,实现插入排序实现代码

    2023-08-07 10:41:08
  • MySQL 8.0.29 安装配置方法图文教程(windows zip版)

    2024-01-17 17:06:44
  • 用SQL语句生成带有小计合计的数据集脚本

    2009-01-06 11:33:00
  • SpringBoot配置连接两个或多个数据库的实现

    2024-01-14 14:40:36
  • linux下perl操作mysql数据库(需要安装DBI)

    2024-01-15 09:32:50
  • 无忧贴子管理器(ListView组件)

    2009-01-02 17:56:00
  • 利用python读取YUV文件 转RGB 8bit/10bit通用

    2023-09-05 08:33:19
  • 用mysql做站点时怎样记录未知错误的发生

    2009-01-14 13:16:00
  • python 线性回归分析模型检验标准--拟合优度详解

    2022-07-24 08:29:49
  • python库JsonSchema验证JSON数据结构使用详解

    2023-02-14 16:24:27
  • ASP程序中输出Excel文件实例一则

    2008-11-07 15:29:00
  • Python文本文件的合并操作方法代码实例

    2022-12-07 21:52:54
  • Django auth 应用模块详解

    2023-05-20 11:17:17
  • Python使用Beautiful Soup实现解析网页

    2022-11-21 19:17:22
  • 浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑

    2024-04-10 13:46:11
  • MySQL 表字段属性

    2011-09-10 16:01:01
  • Python获取网络时间戳的两种方法详解

    2023-04-11 06:38:21
  • asp之家 网络编程 m.aspxhome.com