2017-05-08 25 views
1

我想獲取$ HTTP的響應並將其映射到一個空對象。在這裏我曾嘗試Angular.forEach上的錯誤,value.split不是函數

主代碼

function myData(myUrl) { 
     $http({ 
       method: 'POST', 
       url: "http://localhost:8085/api/foo", 
       data: $scope.myUrl,  
     }) 
     .then(
      function successCall(response) { 
       $scope.resultForRecord=response; 
       $scope.obj=[]; 
       angular.forEach(response,function (valueToObj,key) { 
       $scope.obj.push(
        {'key' : $scope.resultForRecord.toString().split("=")[0],'value' : $scope.resultForRecord.toString().split("=")[1]})}); 
         console.log($scope.obj); 
      }, 
      function errorCall(response) {        
       console.log(response); 
       $scope.resultForRecord=response; 
      }); 
     } 

,誤差valueToObj.split不是一個函數

現在我已經嘗試了硬編碼實踐演示。這工作得很好。這裏是演示

DEMO:

angular.module('app') 
    .controller('MainCtrl', function ($scope) { 

     $scope.dataSet=[ 
      "jon=12", 
      "petter=10", 
      "sara=8" 
     ]; 
     $scope.obj=[]; 
     angular.forEach($scope.dataSet,function (key,value) { 
      $scope.obj.push(
       {'name' : key.split("=")[0],'age' : key.split("=")[1]} 
      ); 
    }); 

     console.log($scope.dataSet); 
     console.log($scope.obj); 
    }); 

我怎麼能解決這個問題?在此先感謝

+1

您的代碼是不完整的,所以我們不得不猜測。我的猜測是,你想分割你得到的數組中的每一個元素作爲HTTP響應的** data **。但是,您將HTTP響應對象的每個值(狀態,標題,數據等)分開。簡單地使用你的調試器,或記錄響應的價值,將會有所幫助。你似乎已經這樣做了,但是你還沒有發佈記錄的內容。 –

+0

更新對不起, – TheTechGuy

回答

1
angular.forEach(response, function(valueToObj, key) { 
    $scope.obj.push(
    { 
     'key' : $scope.resultForRecord.toString().split("=")[0], 
     'value' : $scope.resultForRecord.toString().split("=")[1] 
    } 
); 
}); 

我重新格式化了您的代碼,使其更清晰。

閱讀代碼:

  1. 你迭代的response所有字段。 response是HTTP響應對象,它有4個字段:status(一個數字),headers,data,config。您實際上想要遍歷響應(response.data)作爲正文發送的JSON對象的元素;
  2. 你甚至沒有對函數內的當前元素做任何事情。而不是拆分valueToObj,你拆分$scope.resultForRecord.toString()。所以你多次拆分相同的東西,那就是整個HTTP響應的字符串表示。

你最想的是:

angular.forEach(response.data, function(element) { 
    $scope.obj.push(
    { 
     'key' : element.split("=")[0], 
     'value' : element.split("=")[1] 
    } 
); 
}); 

或者,清潔:

$scope.obj = response.data.map(function(element) { 
    var parts = element.split("="); 
    return { 
    key: parts[0], 
    value: parts[1] 
    }; 
}); 
+0

非常感謝你..是的,它的工作 – TheTechGuy

0

.split需要一個字符串。

您遍歷使用數組..

valueToObj.split 

這個假設在每個迭代上valueToObj是一個字符串。但是,如果它不是一個字符串,那麼該函數將不存在,你會得到這個錯誤。這是因爲分割函數只存在於字符串上。