2017-05-08 1 views
1

$ HTTP의 응답을 가져 와서 빈 객체에 매핑하려고합니다. 여기에 무엇을 내가Angular.forEach on 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 응답의 ** 데이터 **로 나누고 싶다. 그러나 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 응답 객체이며 status (number), headers, data, config의 4 개 필드로 구성됩니다. 실제로 본문 응답 (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에 가정 당신은 사용하여 배열을 통해 반복되는

..

valueToObj.split 

은 문자열입니다. 그러나 문자열이 아니면 함수가 존재하지 않고이 오류가 발생합니다. 분할 함수는 문자열에만 있기 때문입니다.

관련 문제