Ajax 已普遍用于许多出名的 Web 应用程序服务,例如 GMail、Google Maps、Flickr 和 。通过使用异步 XML 消息传递,Ajax 为 Web 开发人员提供了一种扩展其 Web 应用程序价值和功能的此在缺省状况下,大多数 Web 浏览器中的 XMLHttpRequest 对象都限制为只能与顾客正在查看的 Web 页所在的域中承载的资源和服务进行交互。例如,如果我正在访问一种位于 / 的页面,则 XMLHttpRequest 将只容许访问位于 域中的资源。对于制止歹意应用程序代码潜在地对其不应当访问的信息进行不合适的访问,这种避免措施非常必要。由于这里简介的 Web 服务客户机基于 XMLHttpRequest,因此这种限制同样合用于您将会调用的 Web 服务。
如果您需要可以访问位于另一种域中的 Web 服务,您可以使用如下两种合理的解决方案:
对 JavaScript 进行数字签名。通过对 JavaScript 脚本进行数字签名,您就告诉了 Web 浏览器可以信任该脚本不会执行任何歹意的活动,并且对 XMLHttpRequest 可以访问的数据的限制也应当取消。
使用代理。一种简朴的解决方案是,通过位于加载的页面所在的域中的代理资源来传递所有来自 XMLHttpRequest 的祈求。该代理将 XMLHttpRequest 的祈求转发到远程位置,并将成果返回给浏览器。从 XMLHttpRequest 对象的角度来看,这种交互发生在既有的安全配备之内。
遗憾的是,以上代码无法在 Internet Explorer Version 6 中运营,由于该浏览器不仅没有实现 getElementsByTagNameNS 功能,并且事实上还使用了一种很糟糕的措施——将 XML 命名空间的前缀作为其元素和属性名称的一部分来看待。
Internet Explorer 缺少对 XML 命名空间的支持,这使得它很难解决命名空间密集的 XML 格式,例如采用独立于浏览器的方式的 SOAP。虽然要执行某些像提取成果中的属性值这样简朴的操作,您也必须编写可以在多种浏览器中实现一致预期行为的特殊代码。幸运的是,这种特殊代码可以封装并重用。
为了从 Web 浏览器中调用 Web 服务,并可靠地解决 SOAP 消息,您需要一方面理解某些安全问题(请参见侧栏“有关安全性”)。此外,您还需要编写一种 JavaScript 脚本库(图 2),以便将底层浏览器 XML 实现中的不一致状况抽象出来,从而使您可以直接解决 Web 服务数据。
图 2. 在使用 Web Services JavaScript Library 的 Web 浏览器中通过 Javascript 调用 Web 服务
图 2中的 Web Services JavaScript Library () 是一组 JavaScript 对象和实用功能,它们为基于 SOAP 的 Web 服务提供了基本的支持。 定义了下列对象:
:一种包装了 XMLHttpRequest 的 Web 服务客户机
:XML 限定名实现
:自定义 XML 序列化器/反序列化器的基本
:祈求/响应解决程序的基本
:包装了 XML DOM 的基本 SOAP 元素
:SOAP Envelope 对象扩展了
:SOAP Header 对象扩展了
:SOAP Body 对象扩展了
XML:用于解决 XML 的跨平台实用措施
的核心是 对象,该对象提供了调用 Web 服务的措施。 重要负责与 XMLHttpRequest 对象进行交互,并解决 SOAP 响应。
对象公开了如下三个措施:
add_handler。向解决链添加祈求/响应解决程序。解决程序对象在调用 Web 服务的前后被调用,以支持可扩展的预调用解决和后调用解决。
invoke。将指定的 对象发送给 Web 服务,然后在接受到响应后调用回调函数。当调用使用文本 XML 编码的文档样式的 Web 服务时,请使用此措施。
invoke_rpc。创立一种封装 RPC 样式祈求的 ,并将其发送到 Web 服务。当接受到响应时,
使用Ajax调用SOAPWeb服务 来自淘豆网m.daumloan.com转载请标明出处.