Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ngresource工厂返回未定义的_Angularjs_Api_Callback_Ngresource - Fatal编程技术网

Angularjs ngresource工厂返回未定义的

Angularjs ngresource工厂返回未定义的,angularjs,api,callback,ngresource,Angularjs,Api,Callback,Ngresource,我正在用ngresource编写一个工厂,虽然它在成功回调中打印了值,但它不会将值返回给控制器。我在控制台中收到未定义的消息 .controller('loginCtrl', function($scope,loginInfoService) { console.log(loginInfoService.getJsonId()); }) .factory('accessUrlService', ['$resource',function($resource){ return $resource

我正在用ngresource编写一个工厂,虽然它在成功回调中打印了值,但它不会将值返回给控制器。我在控制台中收到未定义的消息

.controller('loginCtrl', function($scope,loginInfoService) {
console.log(loginInfoService.getJsonId());
})

.factory('accessUrlService', ['$resource',function($resource){
return $resource('ip/Web/ws/login/restLogin');
}])


.factory('loginInfoService', ['accessUrlService',function(accessUrlService){

return  {
    getJsonId: function() {         
                accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
                console.log(data.jsessionId);                           
                return data;                                
                });     
            }
        }

}])

我认为您应该尝试在
getJsonId
方法中声明
return
语句

getJsonId: function() {         
                return accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
                console.log(data.jsessionId);                           
                return data;                                
                });     
            }
在您的
控制器中
调用以下方法

loginInfoService.getJsonId().$promise.then(function(response){ console.log(response); });

我认为您应该尝试在
getJsonId
方法中声明
return
语句

getJsonId: function() {         
                return accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
                console.log(data.jsessionId);                           
                return data;                                
                });     
            }
在您的
控制器中
调用以下方法

loginInfoService.getJsonId().$promise.then(function(response){ console.log(response); });

我不得不在这里使用$q服务。我将$q作为参数传递给我的工厂,然后延迟响应,直到收到服务器的响应

这是经过改造的工厂

.factory('loginInfoService',['accessUrlService','$q',function(accessUrlService,$q){
  return  {
getJsonId: function() {  
    var deferred = $q.defer();
      accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
       deferred.resolve(data); 
    },function(error){
        console.log("eror");
        deferred.reject(error);
    }); 

    return deferred.promise;
    }
}
}])
我这样在控制器中调用它

.controller('loginCtrl', function($scope,loginInfoService) {
  loginInfoService.getJsonId().then(function(data){
console.log(data.jsessionId);
  },function(error){
console.log(error+ " Error" )
  });
})

请务必告诉我是否可以使用此代码。

我必须在这里使用$q服务。我将$q作为参数传递给我的工厂,然后延迟响应,直到收到服务器的响应

这是经过改造的工厂

.factory('loginInfoService',['accessUrlService','$q',function(accessUrlService,$q){
  return  {
getJsonId: function() {  
    var deferred = $q.defer();
      accessUrlService.save({"login":"admin","password":"log","role":"Admin"},function(data){
       deferred.resolve(data); 
    },function(error){
        console.log("eror");
        deferred.reject(error);
    }); 

    return deferred.promise;
    }
}
}])
我这样在控制器中调用它

.controller('loginCtrl', function($scope,loginInfoService) {
  loginInfoService.getJsonId().then(function(data){
console.log(data.jsessionId);
  },function(error){
console.log(error+ " Error" )
  });
})

请务必告诉我是否可以修改此代码。

谢谢您的回复。我尝试了你的代码,但我收到一个错误,它是
TypeError:loginInfoService.getJsonId(…)。then不是一个函数
。可能是因为我使用的是ngresource而不是http.updated。控制器呼叫服务时添加“$PROMITE”谢谢您的回复。我尝试了你的代码,但我收到一个错误,它是
TypeError:loginInfoService.getJsonId(…)。then不是一个函数
。可能是因为我使用的是ngresource而不是http.updated。控制器调用服务时添加“$PROMITE”