2017-05-08 119 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是一个字符串。但是,如果它不是一个字符串,那么该函数将不存在,你会得到这个错误。这是因为分割函数只存在于字符串上。