2016-07-04 61 views
0

被解決後,我在我的HTTP服務(UserService)下面的代碼:角承諾給對象的數組這一翻譯陣列的控制器

module1.factory('UserService', ['$http', '$q', function($http, $q) { 



     return { 

     getModelValueTableValues1: function(CarLine, GeographyType, GeographyName, Duration, ModelId, ScenarioId, TimeKey) { 



      return $http.get('http://localhost:8080/scenarioplan/models/data?ScenarioId=5&CarLine=Nissan%20-%20Rogue&TimeKey=Jul-16&Duration=1&Geographytype=National&GeographyName=National&ModelId=1001') 
      .then(
       function successCallback(response) { 



       return response.data; 


       }, 
       function errorCallback(errResponse) { 
       console.error('Error while fetching Model Parameter Table'); 
       return $q.reject(errResponse); 
       } 
      ); 
     }, 

,我已經在我的控制器下面的代碼:

$scope.getModelValueTableValues = function(CarLine, Geography, Duration, ModelId, ScenarioId) { 

    UserService.getModelValueTableValues1(CarLine, Geography.split('-')[0], Geography.split('-')[1], Duration, ModelId, ScenarioId, '16-Jul') 
    .then(
     function(d) { 

     console.log("the data object from promise is", d); 
     console.log("the data object from promise is", d.length); 

     console.log('The Promise has been successfully resolved!!!!'); 
     }, 
     function(errResponse) { 
     console.error('The Promise was not successfull'); 
     } 
    ); 
}; 

但是,在我的調試窗口(F12)中,promise得到解析後會返回一組對象,如下圖所示,而不是返回一組數據。 enter image description here

從Web服務調用的效應初探似乎有效數據如圖下面F12控制檯輸出:

enter image description here

有人可以幫我解決這個問題? 我一直試圖解決這一整天但沒有任何成功!

+0

你的「響應」有什麼? 'http:// localhost:8080/scenarioplan/models/data?ScenarioId = 5&CarLine = Nissan%20-%20Rogue&TimeKey = Jul-16&Duration = 1&Geographytype = National&GeographyName = National&ModelId = 1001'這個url返回 –

+0

Hi @SusheelSingh,I已將圖像附加到問題上。 – Sabyasachi

+1

'數據數組'你能解釋這一點多一點。 –

回答

1

$ http工具已經。你的功能應該是

return $http.get('http://localhost:8080/scenarioplan/models/data?ScenarioId=5&CarLine=Nissan%20-%20Rogue&TimeKey=Jul-16&Duration=1&Geographytype=National&GeographyName=National&ModelId=1001'); 

或者如果你想要在函數內處理數據你應該。

return { 

    getModelValueTableValues1:function(CarLine,GeographyType,GeographyName,Duration,ModelId, ScenarioId,TimeKey){   
    var deffered = $q.defer(); 
    $http.get('http://localhost:8080/scenarioplan/models/data?ScenarioId=5&CarLine=Nissan%20-%20Rogue&TimeKey=Jul-16&Duration=1&Geographytype=National&GeographyName=National&ModelId=1001') 
     .then(
        function successCallback(response){ 
            deffered.resolve(response); 
           }, 
        function errorCallback(errResponse){ 
          console.error('Error while fetching Model Parameter Table'); 
          deffered(errResponse); 
          } 
         ); 
     return deffered.promise; 
     }, 
+0

@vanmohit ...你的方法已經部分顯示了我前方的道路。試過這個之後我會更新你的。謝謝! – Sabyasachi

+0

嗨@Vanmohit .....我終於能夠開始工作了。我不得不在我的控制器中使用函數JSON.parse(angular.toJson(d.data))來處理函數返回的數據。 – Sabyasachi

+0

即使你想在'.then'內部處理數據,你也可以返回'$ http'的promise,只是返回函數內部的結果。對於拒絕方面,使用'return $ q.reject(reason)'。 – Icycool

0

以下是我遵循的完成步驟,以解決我的問題。

  1. 至於建議的@vanmohit: 我用他的代碼,我appfactory服務裏面是這樣的:

    return { 
        getModelValueTableValues1: function(CarLine,GeographyType,GeographyName,Duration,ModelId, ScenarioId,TimeKey){   
         var deffered = $q.defer(); 
         $http.get('my url here') 
          .then(
            function successCallback(response){ 
             deffered.resolve(response); 
            }, 
            function errorCallback(errResponse){ 
             console.error('Error while fetching Model Parameter Table'); 
             deffered(errResponse); 
            } 
          ); 
         return deffered.promise; 
        }, 
    
  2. 在我的控制器代碼,我用這個功能:

    function(CarLine, Geography,Duration,ModelId, ScenarioId){ 
        UserService.getModelValueTableValues1(CarLine,Geography.split('-')[0],Geography.split('-')[1],Duration,ModelId,ScenarioId,'16-Jul') 
         .then(
          function(d) { 
           console.log("the data object from promise is",JSON.parse(angular.toJson(d.data))[1].paramName); 
           //console.log("the data object from promise is",d.length); 
           //JSON.parse(angular.toJson(resp)) 
           $scope.firstrow = JSON.parse(angular.toJson(d.data)); 
           console.log('The Promise has been successfully resolved!!!!'); 
          }, 
          function(errResponse){ 
           console.error('The Promise was not resolved'); 
          } 
         ); 
        }; 
    

現在我能夠解析我的控制器內的JSON數據! 非常感謝您的幫助!

+0

你可以使用$ scope.firstrow = d.data那夠了。默認情況下,$ http將數據解析爲JSON。 – vanhonit

+0

@vanhonit ....另外,我無法使用從promise返回的值並將其保存到變量中...由於它是異步調用,因此無法將其保存到作用域變量。你能幫我做嗎? – Sabyasachi

+0

@vanmohit我無法訪問$範圍。在我寫$ scope.firstrow = d.data之後,在這個函數之外的firstrow變量。當我在函數外部訪問$ scope.firstrow變量時。它返回爲未定義。爲什麼這樣? – Sabyasachi