AngularJS SOAP调用

时间:2016-08-28 22:06:38

标签: javascript angularjs soap

我是这个IT领域的新人,我正在做一个apprentienship,这个appreintienship的目标是制作一个应用程序,从运行SOAP的服务器(不幸的是)检索数据,这是我的第一个呼唤gettin'关于服务器内所有者的一些信息。这个电话不起作用(我确实在我的代码中写了sh * t)并且我不知道如何纠正它并做出更好的SOAP调用。 这是代码

var myApp = angular.module('myApp', []);
myApp.controller('myCtrl', function($scope,$http) {
    var sr = 
                '<?xml version="1.0" encoding="utf-8"?>' + 
                '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
                    '<soap:Header>' +
                        '<AuthHeader xmlns="Logisense_EngageIP">' + 
                            '<Username>admin</Username>' + 
                            '<Password>admin</Password>' +
                        '</AuthHeader>' +
                    '</soap:Header>' +
                    '<soap:Body>' + 
                        '<GetOwnersUsers xmlns="Logisense_EngageIP">' + 
                            '<ownerUsername>string</ownerUsername>' + 
                        '</GetOwnersUsers>' +
                    '</soap:Body>' +
                '</soap:Envelope>';
    var soapResponse = null;
    function makeSoap(){
        $http.post('31.44.16.67/GetOwnersUsers', sr)
            .success(function(data) {
                soapResponse = data;
                $scope.response = soapResponse;
            });
    }
    $scope.callSoap = function(){
        $scope.soapRequest = sr;
        makeSoap();
    };
});

非常感谢大家的提示和提示!

1 个答案:

答案 0 :(得分:1)

SOAP是Web应用程序可能发生的最糟糕的事情。

对于我们的应用,我们使用javascript SOAP client library

在角度应用程序中,您需要创建一个带有工厂的模块:

angular.module('angularSoap', []).factory("$soap", [ '$q', "$http", function($q, $http) {
    return {
        post : function(action, params) {
            var deferred = $q.defer();
            var soapParams = new SOAPClientParameters();
            for ( var param in params) {
                soapParams.add(param, params[param]);
            }
            var soapCallback = function(e) {
                if (e.constructor.toString().indexOf("function Error()") != -1) {
                    deferred.reject(e);
                } else {
                    deferred.resolve(e);
                }
            }
            SOAPClient.invoke('http://31.44.16.67/GetOwnersUsers', action, soapParams, true, soapCallback);
            return deferred.promise;
        }
    }
} ]);

您需要在主应用中注入angularSoap

angular.module('yourApp', ['angularSoap']);

然后您将可以访问$soap服务。

return $soap.post("ws:authentificationRequestParameter", {
    login : login,
    password : password,
    autoLog : autoLog
});

您还可以尝试在Firefox中无法使用的angular-soap插件。 (镀铬很好)。