使用jQuery Ajax调用SOAP-XML Web服务 - 缩小实现?

时间:2012-05-21 10:13:56

标签: jquery ajax web-services soap

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

2 个答案:

答案 0 :(得分:1)

SOAP协议消息格式定义了3个元素:Envelope,Header和Body。在这三个中,标题是可选的,可以省略,其他两个是必填项(SOAP 1.1 Specification: 4. SOAP EnvelopeSOAP 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。