楼主: lastwinner

[转载] AJAX 及使用 E4X 编写 Web 服务脚本

[复制链接]
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
11#
 楼主| 发表于 2006-7-8 23:53 | 只看该作者
首先值得注意的一行是:

var response = <height/>;

该行允许您将 XML “嵌入”到 JavaScript 中。采用这种语法有两个好处:第一,它确实会使 XML 的使用变得很容易。第二,这些代码的意义非常清晰。

现在您可以向该元素中添加更多的子元素:

response.feet = ft;

这样创建了 <height> 子元素,其标记名称被设置为“feet”,并且将数值设置为变量 ft 的值。

您也可以用这种方式操作其属性:

response.@measure = "imperial";

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
12#
 楼主| 发表于 2006-7-8 23:53 | 只看该作者
现在我们使用该功能来更新 XML:

[php]
for each (var p in x.person) {
        if (p.height.@measure=="metric"
                p.height=metricToImperial(p.height);  
}

print (x);

..........
[/php]

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
13#
 楼主| 发表于 2006-7-8 23:54 | 只看该作者
这里是输出内容:
[php]
<people>
  <person gender="male">
    <name>Ant</name>
    <hair>Shaggy</hair>
    <eyes>Blue</eyes>
    <height measure="imperial">
      <feet>5</feet>
      <inches>11</inches>
    </height>
  </person>
  <person gender="male">
    <name>Paul</name>
    <hair>Spiky</hair>
    <eyes>Grey</eyes>
    <height measure="imperial">
      <feet>5</feet>
      <inches>12</inches>
    </height>
  </person>
</people>

..................
[/php]

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
14#
 楼主| 发表于 2006-7-8 23:54 | 只看该作者
E4X 中的 XML 命名空间(Namespace)

如果您是一名 XML 高手,那么此时您可能想知道如何使用该语法来管理 XML 命名空间。这里有三种方式来实现该操作:

首先,您可以使用内嵌的 XML 语法:
[php]
var soapMsg = <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"/>;
print(soapMsg.namespace());
http://www.w3.org/2003/05/soap-envelope

...............
[/php]

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
15#
 楼主| 发表于 2006-7-8 23:55 | 只看该作者
第二个方法是在创建元素之前设置缺省的 XML 命名空间:
[php]
default xml namespace = new Namespace("http://www.w3.org/2003/05/soap-envelope";

..........
[/php]

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
16#
 楼主| 发表于 2006-7-8 23:56 | 只看该作者
您可以将它设置为空字符串,以便对该缺省的命名空间进行重新设置,例如:

default xml namespace = ""

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
17#
 楼主| 发表于 2006-7-8 23:56 | 只看该作者
最后一种方法是使用 :: 运算符
[php]
var f = new Namespace("http://fremantle.org";
soapMsg.Body.f::GetStockQuote="IBM";
print(soapMsg);
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
  <s:Body>
     <frem:GetStockQuote xmlns:frem="http://fremantle.org">
        IBM
     </frem:GetStockQuote>
  </s:Body>
</s:Envelope>
....................

[/php]

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
18#
 楼主| 发表于 2006-7-8 23:57 | 只看该作者
XML 元素排序
E4X 所具有的一个明显的优点是它完全支持 XML,包括排序功能。许多从 XML 文档到相应编程语言对象的直接映射仅仅支持符合常规对象语义的 XML 语义子集——因此就失去了不仅能够表示对象而且还表示文档的功能。但是对本文来说,它是不合适的,只要简单查看一下该规范就可以看出,E4X XML 对象具有的内置功能能够对 XML 元素进行细致准确的排序。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
19#
 楼主| 发表于 2006-7-8 23:57 | 只看该作者
在 XML 中使用 Javascript 表达式
在转向 Web 服务之前,我们向您介绍的最后一个内容——使用大括号“{}”。以上我们介绍了“内嵌的”XML。E4X 也允许您重新进入 JavaScript 环境,并且可以包括了计算后的表达式值。例如:
[PHP]  
var num = 36;
var p = <paul><age>{num}</age></paul>
print(p);
<paul>
  <age>36</age>
</paul>
............
[/PHP]

到目前为止,我们已经介绍了 E4X 的基础知识,下面我们就可以使用这些基本知识进行以下操作。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
20#
 楼主| 发表于 2006-7-8 23:58 | 只看该作者
使用 E4X 来调用 Web 服务
本节中,我们将描述如何在以下两个环境中使用 E4X:
  • 使用 XMLHttpRequest 的 Mozilla 1.8
  • Java/Rhino

您可以很容易地在浏览器中使用 E4X 来调用 Web 服务。但是这里存在问题!到目前为止,唯一的支持 E4X 的浏览器是 Mozilla 1.8 的专业版。
不过我们并没有将其作为一种可移植的跨浏览器的解决方案来推荐,以下的实例演示了 E4X 如何以一种简单的方式来调用 Web 服务。在下一节中,我们将查看运行在 Rhino JavaScript 引擎中的另一种方法。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表