我正在为
Andrew McGivery的AngularJS使用肥皂服务
它从Chrome浏览器调用时效果很好,但在Firefox和IE11上返回一个typeError.
TypeError: e is null at angular.soap.js line 16
有关代码如下:
.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,soapParams,true,soapCallback);
return deferred.promise;
},setCredentials: function(username,password){
SOAPClient.username = username;
SOAPClient.password = password;
}
}
}]);
e在Chrome中是我的webservice(用户对象)返回的对象,在Firefox中它是空的,我不知道在库中查找哪里来调试问题.
更新:
我的控制器如下所示:
.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个upVote的答案…
在函数SOAPClient._getElementsByTagName中
我换行了
return document.getElementsByTagName(tagName);
对于
return document.getElementsByTagNameNS(“*”,tagName);
我换行了
return document.getElementsByTagName(tagName);
对于
return document.getElementsByTagNameNS(“*”,tagName);
为我工作!