龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

AJAX及使用E4X编写Web服务脚本(1)(6)

时间:2013-03-06 14:58来源:未知 作者:admin 点击:
分享到:
现在您已经有了一个完全成形的 SOAP 请求消息。如果您想要测试该消息信封,那么需要按照以下操作: XXX 为了发送它,你必须使用 XMLHTTPRequest 对象。我们
现在您已经有了一个完全成形的 SOAP 请求消息。如果您想要测试该消息信封,那么需要按照以下操作:


 
   
      XXX
   

 

为了发送它,你必须使用 XMLHTTPRequest 对象。我们创建了一个简单的辅助函数,以支持使用 XMLHttpRequest 对象来调用使用 E4X 的服务。此 execService 函数不仅支持异步方式而且也支持同步方式。

function execService(url, xml, callback) {
   var xmlhttp = new XMLHttpRequest();
   var async=false;
   if (arguments.length==3) async=true;
      xmlhttp.open("POST", url, async);
      xmlhttp.setRequestHeader("SOAPAction", """")
      xmlhttp.setRequestHeader("Content-Type", "text/xml")
      if (async) {
         var f = function() {
         if (xmlhttp.readyState==4) {
            callback(new XML(xmlhttp.responseText));
         }
      }

      xmlhttp.onreadystatechange = f;
   }
   xmlhttp.send(xml.toString());
   if (!async) return new XML(xmlhttp.responseText);
}

下面我们来详细地看看这些代码。首先,这些代码支持两种调用方式。您可以使用其中一种:

     XML execService(String url, XML envelope);或者void execService(String url, XML envelope, function callback);

在这种情况下,回调函数应该是 void callback(XML x)。

于是您可以使用该函数直接调用 XML 服务,并且等待响应,或者您也可以传送一个函数,使用 XML 响应消息调用该函数。

该函数基于参数的数量来决定它是异步还是同步(3 是异步),然后简单地使用 XMLHttpRequest 对象以 POST 请求方式来把 XML 消息放到 HTTP 请求信息,并把请求发送到指定的 URL。

我们设置了两个 HTTP 头信息――SOAPAction 和 Content-Type――然后使用 xmlhttp.send(xml.toString()) 将 SOAP 信封消息发送出去。

如果该调用行为是异步的,那么在调用从该响应创建的 XML 回调函数之前,它需要等待,直到 readyState 为 4(全部完成)。

因此使用该操作的代码如下所示:

   var url = document.getElementById("url").value;

   var callback = function(resp) {
      alert(resp..*::getQuoteReturn);
   }

   execService(url, envelope, callback);

在我们的样例中,我们使用异步模型。典型的 Web 浏览器在与服务器通话时并不阻塞,并且我们也不希望它那样。举例来说,如果我们阻塞了浏览器,那么浏览器的窗口可能最终表现为“不响应”状态,从而促使用户结束它。

resp..*::getQuoteReturn

精彩图集

赞助商链接