我正在使用以下直接的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。
答案 0 :(得分:1)
SOAP协议消息格式定义了3个元素:Envelope,Header和Body。在这三个中,标题是可选的,可以省略,其他两个是必填项(SOAP 1.1 Specification: 4. SOAP Envelope,SOAP 1.2 Specification: 5. SOAP Message Construct)。
因此,您无法完全摆脱Envelope元素,因为SOAP协议消息格式需要它。但是,您可以使用一些现成的库来隐式地为您准备消息,这样您就不必处理它了。它还允许您将SOAP消息构造代码保存在某个位置深处,而您看不到它。它肯定会使你的代码更清洁。
一个快速的谷歌搜索告诉我们有一个名为jqSOAPClient的jQuery插件可供我们使用,但不幸的是,jQuery插件网站目前处于脱机状态。其他选择是JavaScript SOAP Client。
答案 1 :(得分:1)
有一个相对较新的插件可用:
http://plugins.jquery.com/soap/
我分叉了项目,并且一直在进行一些修改(插件没有处理我正在使用的服务)。我希望在某些时候合并我的更新,但很乐意得到任何反馈。
https://github.com/zachofalltrades/jquery.soap
这个插件非常好用的是它会为你构建XML。您提供了JSON数据结构,并且只提供了一些其他参数。该插件构建XML,将其发送到服务,并将响应转换回JSON。