我正在使用Andrew McGivery中的AngularJS的soap服务

从Chrome调用时,它可以完美工作,但在Firefox和IE11上返回typeError。


TypeError:e在angular.soap.js第16行为null


有问题的代码如下:

.factory("$soap",['$q',function($q){
    return {
        post: function(url, action, params){
            var deferred = $q.defer();

            //Create SOAPClientParameters
            var soapParams = new SOAPClientParameters();
            for(var param in params){
                soapParams.add(param, params[param]);
            }

            var soapCallback = function(e){
                //ERROR THROWN ON LINE BELOW
                if(e.constructor.toString().indexOf("function Error()") != -1){
                    deferred.reject("An error has occurred.");
                } else {
                    deferred.resolve(e);
                }
            }

            SOAPClient.invoke(url, action, soapParams, true, soapCallback);

            return deferred.promise;
        },
        setCredentials: function(username, password){
            SOAPClient.username = username;
            SOAPClient.password = password;
        }
    }
}]);


Chrome中的e是我的Web服务返回的对象(用户对象),在Firefox中为null,并且我不知道在库中查找调试问题的位置。

更新:

我的控制器如下所示:

.controller('SoapCtrl', function($soap) {

    this.login = function(credentials) {

        $soap.post('MYAPI', 'MYMETHOD', {login: credentials.login, password: credentials.password}).then(function(data) {
            console.log(data.userid);
        });
    }

})


我还尝试从我的角度应用程序内的jquery插件jquery.soap调用相同的Web服务,并且在Chrome和Firefox中都得到了预期的行为。

最后更新

由于这是一个专业项目,因此我们决定继续使用可以正常工作的插件。 jquery.soap

author's page上已发布2个问题,目前暂无答案。

我本来会向赏金授予有效答案,但一半的赏金会自动以2票获得答案...

最佳答案

在功能SOAPClient._getElementsByTagName
我换线
return document.getElementsByTagName(tagName);
对于
return document.getElementsByTagNameNS("*", tagName);

为我工作!

10-07 19:52
查看更多