我正在使用以下直接的jQuery实现
var soapMessage = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns:ns1="http://site.com/">
<ns1:insertLocationElement>
<ns1:location>
<ns1:locationName>' + sName + '</ns1:locationName>
<ns1:locRadius>' + sRadius + '</ns1:locRadius>
<ns1:lngGPS>' + gLongitude + '</ns1:lngGPS>
<ns1:latGPS>' + gLatitude + '</ns1:latGPS>
<ns1:locationAddress>' + sAddress + '</ns1:locationAddress>
</ns1:location>
</ns1:insertLocationElement>
</soap:Body>
</soap:Envelope>';
$.ajax({
type : "POST",
url : service,
data : soapMessage,
contentType : "text/xml; charset=ansi",
dataType : "xml",
success : AjaxSucceededInsert,
error : AjaxFailedGeneral
});
我想知道 - 有没有其他方法可以调用这样的 Web 服务,而不包括整个 SOAP 信封? 它使代码完全不干净 IMO。
SOAP 协议消息格式定义了 3 个元素:信封、标头和正文。在这三者中,标头是可选的,可以省略,另外两个是必需的(SOAP 1.1 规范:4.SOAP 信封,SOAP 1.2 规范:5.SOAP 消息构造(。
因此,您无法完全摆脱信封元素,因为它是 SOAP 协议消息格式所要求的。但是,您可以使用一些现成的库,这些库可以隐式为您准备消息,这样您就不必处理它。它还允许您将 SOAP 消息构造代码保存在您看不到它的某个深处。它肯定会使您的代码更清晰。
快速谷歌搜索告诉我们,我们有一个名为jqSOAPClient的jQuery插件,但不幸的是,jQuery插件网站目前处于离线状态。另一种选择是JavaScript SOAP Client。
相对较新的插件可用:
http://plugins.jquery.com/soap/
我分叉了项目,并一直在进行一些修改(该插件没有处理我正在使用的服务(。我希望在某个时候合并我的更新,但很乐意得到任何反馈。
https://github.com/zachofalltrades/jquery.soap
这个插件的真正好处是它将为您构建XML。您提供 JSON 数据结构,以及几个其他参数。插件构建 XML,将其发送到服务,并将响应转换回 JSON。