
简介
关于AJAX的许多讨论在这里和那里发生. AJAX基于“异步JavaScript和XML”的缩写,并且XMLHttpRequest现在在所有主流浏览器中都支持该技术. 基本想法很简单-实际上不是突破-但它允许在服务器请求后更新页面,而不必重新加载整个数据集. 可以在百度或Google上找到一些示例.
在本文中,我们提出了一种基于AJAX的解决方案,该解决方案在Internet的常见方面(调用Web服务)具有很大的优势.
在服务器端,我们只需要使用必要的方法公开Web Service(而不是生成包含基于自定义语法或常规XML的数据的动态页面). 在客户端,我们使用WSDL(Web服务描述语言)自动生成JavaScript代理类,以允许使用Web服务返回类型,这类似于Visual Studio在向解决方案添加Web引用时所做的事情.
下图显示了异步调用的SOAP客户端的工作流程:
客户
SOAPClient.invoke

使用JavaScript函数调用“”方法并指定以下内容:
Web服务URL(请注意,出于安全原因,许多浏览器不允许跨域调用). Web方法名称. Web方法参数值. 呼叫模式(async = true,sync = false). 响应于接收而调用的回调方法(对于同步调用是可选的. )
“ SOAPClient.invoke”方法执行以下操作(有关数字,请参见上图):
它获取WSDL并缓存未来请求的描述. 它准备SOAP(1.1版)请求(调用方法和参数值)并将其发送到服务器. 它使用WSDL处理服务器回复,以构造要返回的相应JavaScript对象. 如果调用方式为异步,则调用回调方法,否则返回相应的对象.
使用代码
在公开了有关通过JavaScript使用Web服务的想法之后,我们只需要分析代码.
让我们从定义要传递给Web方法的参数的类开始: “ SOAPClientParameters”:

该代码仅由内部字典(关联数组)组成,该字典包含参数名称(键)和相关值; “ add”方法允许添加新参数,“ toXml”方法为SOAP请求提供XML序列化(请参阅“ SOAPClient._sendSoapRequest”).
让我们定义“ SOAPClient”类,该类只能包含允许异步调用的静态方法js 调用客户端软件,并且该类中只有一个“ public”方法: “ SOAPClient.invoke”.
注意: 由于JavaScript无法预见访问修饰符(例如“ public”js 调用客户端软件,“ private”,“ protected”等),因此我们将使用“ _”前缀表示私有方法.
“ SOAPClient.invoke”方法的接口如上所述. 我们的实现检查调用是异步的(调用结果将传递到回调方法)还是同步的(调用结果将直接返回). 通过调用“ SOAPClient._loadWsdl”方法开始对Web服务的调用:
此方法在缓存中搜索相同的WSDL,以避免重复调用:
SOAPClient_cacheWsdl =新数组();

如果在高速缓存中未找到WSDL(这是当前上下文中的第一个调用),则XMLHttpRequest使用请求根据所需的模式从服务器请求WSDL(无论是否同步). 从服务器获得答案后,SOAPClient._onLoadWsdl将调用“”方法:
WSDL副本存储在缓存中,然后执行“ SOAPClient._sendSoapRequest”方法:
服务名称空间来自WSDL(使用Internet Explorer和Mozilla / FireFox使用不同的XPath查询),然后创建并提交对SOAP版本1.1的请求. “
SOAPClient._onSendSoapRequest“,将在收到服务器响应时调用该方法:

处理服务器响应以查找故障: 如果找到,将引发错误. 相反,如果获得正确的结果,则递归函数将使用服务描述来生成返回类型:
“ SOAPClient._getElementsByTagName”方法根据可用的XML解析器优化XPath查询:
工厂函数XMLHttpRequest根据浏览器类型返回:
通过使用小的(小于10 KB)JavaScript库,并且在服务器端,您可以使用AJAX创建动态Web应用程序,而无需通过简单地使用远程方法公开Web服务来公开整个页面.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-217312-1.html
1
为每日做事