1

我正在使用以下直接的 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。

4

2 回答 2

1

SOAP 协议消息格式定义了 3 个元素:Envelope、Header 和 Body。这三个中,Header 是可选的,可以省略,另外两个是强制性的(SOAP 1.1 Specification: 4. SOAP EnvelopeSOAP 1.2 Specification: 5. SOAP Message Construct)。

因此,您不能完全摆脱 Envelope 元素,因为它是 SOAP 协议消息格式所要求的。但是,您可以使用一些现成的库来隐式地为您准备消息,这样您就不必处理它。它还允许您将 SOAP 消息构造代码保存在您看不到的深处某个地方。它肯定会让你的代码更干净。

快速谷歌搜索告诉我们有一个名为jqSOAPClient的 jQuery 插件可供我们使用,但不幸的是,jQuery 插件网站目前处于离线状态。其他替代方法是JavaScript SOAP Client

于 2012-05-21T12:27:59.337 回答
1

有一个相对较新的插件可用:

http://plugins.jquery.com/soap/

我分叉了这个项目,并且一直在进行一些修改(插件没有处理我正在使用的服务)。我希望在某个时候合并我的更新,但很高兴收到任何反馈。

https://github.com/zachofalltrades/jquery.soap

这个插件的真正好处是它会为你构建 XML。您提供一个 JSON 数据结构,以及几个额外的参数。该插件构建 XML,将其发送到服务,并将响应转换回 JSON。

于 2013-03-22T20:47:21.383 回答